私のプロジェクトでは、アプリケーション内の特定の基準に基づいてviewDidAppearにView Controller(firePromo())を提示しています。私は、viewDidAppearで表示される別のView Controller(firePromo2())の統合を完了しました。viewDidAppearで同時に2つのView Controllerを表示
両方のView Controllerが機能し、意図したとおりに表示されます...ただし、両方のView Controllerが同時に起動される可能性があります。認められている - 確率は低いですが、まだチャンスがあります。
私のコードは以下の通りです:
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に関する余分なロジックがあります。だから両方が評価される可能性がある。
この2つのView Controllerの両方を同時に起動する場合、安全にプレゼンテーションを処理するにはどうすればよいでしょうか?
連続するifの代わりにelse/ifテストを実行しますか? – Larme
@Larme - もし私が "else if hasShownPromo2 == false"を実行した場合 - firePromo()とfirePromo2()の両方が同時に発生した場合、正しく評価されますか? – Joe
達成したいことに依存します。両方のコントローラを表示する必要がある場合は、どのように表示しますか?例えば。両方のプロモーションVCを子コントローラとしてナビゲーションコントローラを提示することができます。または最初のコントローラーを提示し、一度閉じると2番目のコントローラーが表示されます。 –