在我的項目中,我基於App本身內的某些條件在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還有額外的邏輯。所以兩者都有可能評估。
安全地處理這兩個視圖控制器的呈現,如果兩者都會同時觸發,最好的方法是什麼?
做一個其他/如果測試,而不是連續的,如果? – Larme
@Larme - 如果我這樣做「否則如果hasShownPromo2 == false」 - 在同時觸發的情況下,只是firePromo()會評估,而不是firePromo2(),正確嗎? – Joe
取決於你想要達到的目標。如果兩個控制器都應該顯示,你希望他們如何顯示?例如。您可以將兩個promo VC作爲子控制器提供導航控制器;或者你可以出示第一個控制器,一旦它關閉,出現第二個控制器。 –