我试图在第一次加载应用时执行segue。 我可以在调试器中看到我的打印消息,但Perform Segue不起作用。我没有得到任何错误。 有人可以告诉我什么错了吗?
import UIKit
import LocalAuthentication
let isFirstLaunch = UserDefaults.isFirstLaunch()
extension UserDefaults {
// check for is first launch - only true on first invocation after app install, false on all further invocations
// Note: Store this value in AppDelegate if you have multiple places where you are checking for this flag
static func isFirstLaunch() -> Bool {
let hasBeenLaunchedBeforeFlag = "hasBeenLaunchedBeforeFlag"
let isFirstLaunch = !UserDefaults.standard.bool(forKey: hasBeenLaunchedBeforeFlag)
if (isFirstLaunch) {
UserDefaults.standard.set(true, forKey: hasBeenLaunchedBeforeFlag)
UserDefaults.standard.synchronize()
}
return isFirstLaunch
}
}
class loginVC: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
if isFirstLaunch == false {
performSegue(withIdentifier: "setPassword", sender: self)
print("testFalse") }
else {
performSegue(withIdentifier: "setPassword", sender: self)
print("testTrue")}
// Do any additional setup after loading the view, typically from a nib.
}
答案 0 :(得分:25)
您不能在viewDidLoad()中使用performSegue()。将其移至viewDidAppear()。
在viewDidLoad()时,当前视图甚至没有附加到窗口,因此无法进行segue。
答案 1 :(得分:0)
您还可以使用其他方法 - 根据rootViewController
布尔值
isFirstLaunch
更改为您选择的视图控制器
UIApplication.shared.keyWindow?.rootViewController = setPasswordViewController
答案 2 :(得分:0)
我认为您也可以将您的segue置于Dispatch.main.async
DispatchQueue.main.async {
if isFirstLaunch == false {
performSegue(withIdentifier: "setPassword", sender: self)
print("testFalse")
} else {
performSegue(withIdentifier: "setPassword", sender: self)
print("testTrue")
}
}