在ViewDidLoad中执行Segue

我试图在第一次加载应用程序时执行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. } 

您不能在viewDidLoad()中使用performSegue()。 将其移至viewDidAppear()。

在viewDidLoad()时,当前视图甚至没有附加到窗口,因此无法进行segue。

您还可以使用不同的方法 – 根据isFirstLaunch布尔值将主窗口的rootViewController更改为您选择的视图控制器

UIApplication.shared.keyWindow?.rootViewController = setPasswordViewController

我想你也可以把你的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") } }