web-dev-qa-db-ja.com

ViewDidLoadでセグエを実行する

アプリを初めてロードするときにセグエを実行しようとしています。デバッガーで印刷メッセージを確認できますが、PerformSegueが機能していません。エラーは発生しません。誰かが何が悪いのか教えてもらえますか?

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.




    }
10
Paal Aune

ViewDidLoad()内からperformSegue()を使用することはできません。それをviewDidAppear()に移動します。

ViewDidLoad()の時点では、現在のビューはまだウィンドウにアタッチされていないため、まだセグエすることはできません。

35
Smartcat

セグエをDispatch.main.asyncに入れることもできると思います

    DispatchQueue.main.async {
        if  isFirstLaunch == false {
            performSegue(withIdentifier: "setPassword", sender: self)
            print("testFalse") 
        } else {
            performSegue(withIdentifier: "setPassword", sender: self)
            print("testTrue")
        }
    }
1
Philip

別のアプローチを使用することもできます。メインウィンドウのrootViewControllerを、isFirstLaunchbooleanに応じて選択したビューコントローラーに変更します。

UIApplication.shared.keyWindow?.rootViewController = setPasswordViewController

0
cohen72