在 viewDidAppear 中同时呈现两个视图控制器
Presenting two View Controllers at once in viewDidAppear
在我的项目中,我根据应用程序本身的某些标准在 viewDidAppear 中呈现一个视图控制器 (firePromo())。我刚刚完成了将在 viewDidAppear 中呈现的另一个视图控制器 (firePromo2()) 的集成。
两个视图控制器都按预期运行和显示...但是有可能在启动时同时触发两个视图控制器。当然 - 概率很低,但仍有机会。
我的代码如下:
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 涉及额外的逻辑。所以有机会双方都会评估。
如果这两个 View Controller 将同时触发,那么安全处理这两个 View Controller 的呈现的最佳方法是什么?
编辑:早期return方法。
if promoLaunchCounterFromKey == 4 || promoLaunchCounterFromKey == 9 || promoLaunchCounterFromKey == 14 {
firePromo()
return
}
也在firePromo2()
后面加一个return。不过只是一个建议;将所有 fire 促销代码隔离到一个不同的方法中,并从 viewDidAppear:
调用该方法。这样,当方法 return 提早时,您不会阻塞 viewDidAppear:
.
在我的项目中,我根据应用程序本身的某些标准在 viewDidAppear 中呈现一个视图控制器 (firePromo())。我刚刚完成了将在 viewDidAppear 中呈现的另一个视图控制器 (firePromo2()) 的集成。
两个视图控制器都按预期运行和显示...但是有可能在启动时同时触发两个视图控制器。当然 - 概率很低,但仍有机会。
我的代码如下:
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 涉及额外的逻辑。所以有机会双方都会评估。
如果这两个 View Controller 将同时触发,那么安全处理这两个 View Controller 的呈现的最佳方法是什么?
编辑:早期return方法。
if promoLaunchCounterFromKey == 4 || promoLaunchCounterFromKey == 9 || promoLaunchCounterFromKey == 14 {
firePromo()
return
}
也在firePromo2()
后面加一个return。不过只是一个建议;将所有 fire 促销代码隔离到一个不同的方法中,并从 viewDidAppear:
调用该方法。这样,当方法 return 提早时,您不会阻塞 viewDidAppear:
.