내 프로젝트에서는 응용 프로그램 자체의 특정 기준에 따라 viewDidAppear에서 View Controller (firePromo())를 제공합니다. 방금 viewDidAppear에 표시 할 다른 View Controller (firePromo2())를 통합했습니다.viewDidAppear에서 한 번에 두 개의보기 컨트롤러를 표시합니다.
두 개의보기 컨트롤러가 모두 작동하고 의도 한대로 표시됩니다.하지만 두 개의보기 컨트롤러가 동시에 실행될 수 있습니다. 부여됨 - 확률은 낮지 만 여전히 기회가 있습니다.
내 코드는 다음과 같습니다 :!
func firePromo() {
hasShownPromo = true
// ...
self.present(promoView, animated: true, completion:nil)
}
func firePromo2() {
hasShownPromo2 = true
// ...
self.present(promoView2, animated: true, completion:nil)
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if hasShownPromo == false {
if !UserDefaults.standard.bool(forKey: "hasWatchedPromo") {
let promoLaunchCounterFromKey = UserDefaults.standard.integer(forKey: "launchCountForPromoKey")
if promoLaunchCounterFromKey == 4 || promoLaunchCounterFromKey == 9 || promoLaunchCounterFromKey == 14 {
firePromo()
}
}
}
if hasShownPromo2 == false {
if !UserDefaults.standard.bool(forKey: "hasWatchedPromo2") {
let promoLaunchCounterFromKey2 = UserDefaults.standard.integer(forKey: "launchCountForPromoKey2")
if (promoLaunchCounterFromKey2 % 5) == 0 {
firePromo2()
}
}
}
}
내가 위의 코드와 함께, 그것은 가에 의해 firePromo() & firePromo2()는 같은 시간 (5에서 평가하지 않습니다 = 나눌 나타납니다 실현 4/9/14) - 그러나 appDelegate에서 promo2와 관련된 추가 로직이 있습니다. 따라서 둘 다 평가할 가능성이 있습니다.
동시에 두 개의 이벤트 컨트롤러가 동시에 작동하는 경우이 두 개의보기 컨트롤러를 안전하게 처리하는 가장 좋은 방법은 무엇입니까?
연속적인 if 대신 else/if 테스트를 수행 하시겠습니까? – Larme
@Larme - 그렇다면 "else hasShownPromo2 == false"- 동시에 두 개의 fire가 동시에 발생하면 firePromo()가 평가되고 firePromo2()는 정확하지 않습니까? – Joe
달성하고자하는 바에 달려 있습니다. 두 컨트롤러를 모두 표시해야하는 경우 어떻게 표시합니까? 예 : 프로모션 VC를 하위 컨트롤러로 사용할 수있는 탐색 컨트롤러를 제공 할 수 있습니다. 또는 첫 번째 컨트롤러를 제시하고 일단 닫으면 두 번째 컨트롤러를 표시 할 수 있습니다. –