我正在尝试检测该应用是否第一次打开。我把这段代码放在我的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>谁的观点不在 窗口层次结构!
答案 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
中执行。