在ViewDidLoad中执行Segue

时间:2017-08-12 18:54:40

标签: ios swift xcode segue viewdidload

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




    }

3 个答案:

答案 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")
        }
    }