在viewDidAppear中一次呈现两个视图控制器

时间:2017-05-20 20:28:56

标签: ios swift presentviewcontroller viewdidappear

在我的项目中,我根据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涉及额外的逻辑。所以两者都有可能进行评估。

如果两个视频控制器同时触发,那么安全处理这两个视图控制器的演示的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

编辑:早期退货方法。

if promoLaunchCounterFromKey == 4 || promoLaunchCounterFromKey == 9 || promoLaunchCounterFromKey == 14 {
    firePromo()
    return
}

firePromo2()之后添加退货。只是一个建议;将所有火灾促销代码隔离到一个不同的方法中,并从viewDidAppear:调用该方法。这样,当方法提前返回时,您不会阻止viewDidAppear: