2017-08-12 100 views
1

如果在第一次加載應用程序時嘗試執行segue, 我可以在調試器中看到我的打印消息,但Perform Segue不起作用。我沒有得到任何錯誤。 有人可以告訴我什麼是錯的?在ViewDidLoad中執行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. 




    } 
+1

什麼打印在日誌中? – Vyacheslav

+0

'testTrue'爲第一次啓動,'testFalse'爲其他? – Vyacheslav

+1

正確。日誌中的第一行是testFalse –

回答

5

您不能在viewDidLoad()中使用performSegue()。將其移動到viewDidAppear()。

在viewDidLoad()時間,當前視圖甚至沒有附加到窗口,所以它不可能繼續。

+0

謝謝Smartcat。將代碼移到ViewDidAppear(),它現在工作正常! –

0

您也可以使用不同的方法 - 改變主窗口的rootViewController取決於isFirstLaunch布爾

UIApplication.shared.keyWindow?.rootViewController = setPasswordViewController

0

我想你也可以把你的賽格瑞成Dispatch.main.async

您所選擇的視圖控制器
DispatchQueue.main.async { 
     if isFirstLaunch == false { 
      performSegue(withIdentifier: "setPassword", sender: self) 
      print("testFalse") 
     } else { 
      performSegue(withIdentifier: "setPassword", sender: self) 
      print("testTrue") 
     } 
    }