检测首次启动时出错(Swift)

时间:2017-06-30 12:46:16

标签: ios iphone swift segue nsuserdefaults

我正在尝试检测该应用是否第一次打开。我把这段代码放在我的ViewController viewDidLoad()

override func viewDidLoad() {
        super.viewDidLoad()

        let launchedBefore = UserDefaults.standard.bool(forKey: "launchedBefore")
        if launchedBefore  {
            performSegue(withIdentifier: "toMainController", sender: self)
            print("launchedBefore")
        } else {
            performSegue(withIdentifier: "toTutorialController", sender: self)
            UserDefaults.standard.set(true, forKey: "launchedBefore")
            print("not launchedBefore")

        }
    }

但是,每当ViewController启动时,都不会执行segue。但我打印的那个印刷品是打印出来的。如果重要,则segue "toMainController"转到的视图是UITabViewController,而segue "toTutorialController"转到的视图只是UIViewController

有没有人知道为什么这不起作用?

更新

我发现了这个错误

  

2017-06-30 09:02:32.984 AppName [29732:24744712​​]警告:尝试   出现在<   AppName.ViewController:0x7fcbfa908ed0>谁的观点不在   窗口层次结构!

3 个答案:

答案 0 :(得分:1)

首先保存在userDefault中,然后执行segue: -

Doze mode

答案 1 :(得分:1)

override func viewDidLoad() {
        super.viewDidLoad()
      DispatchQueue.main.async {
        let launchedBefore = UserDefaults.standard.bool(forKey: "launchedBefore")
        if launchedBefore  {
            performSegue(withIdentifier: "toMainController", sender: self)
            print("launchedBefore")
        } else {
            UserDefaults.standard.set(true, forKey: "launchedBefore")
            performSegue(withIdentifier: "toTutorialController", sender: self)
            print("not launchedBefore")
        }
    }
  }

答案 2 :(得分:0)

我明白了。问题不在于代码本身,而在于它正在被执行的地方。它需要在UITabBarViewController中执行。