在我的项目中,我根据App本身的某些条件在viewDidAppear中呈现一个View Controller(firePromo())。我刚刚完成了另一个要在viewDidAppear中显示的View Controller(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涉及额外的逻辑。所以两者都有可能进行评估。
如果两个视频控制器同时触发,那么安全处理这两个视图控制器的演示的最佳方法是什么?
答案 0 :(得分:1)
编辑:早期退货方法。
if promoLaunchCounterFromKey == 4 || promoLaunchCounterFromKey == 9 || promoLaunchCounterFromKey == 14 {
firePromo()
return
}
在firePromo2()
之后添加退货。只是一个建议;将所有火灾促销代码隔离到一个不同的方法中,并从viewDidAppear:
调用该方法。这样,当方法提前返回时,您不会阻止viewDidAppear:
。