2017-08-12 3 views
1

J'essaie d'effectuer une section si c'est la première fois que l'application est en cours de chargement. Je peux voir mon message d'impression dans le débogueur, mais le Perform Segue ne fonctionne pas. Je ne reçois aucune erreur. Quelqu'un peut-il me dire ce qui ne va pas?Perform Segue dans ViewDidLoad

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

ce qui imprime dans le journal? – Vyacheslav

+0

'testTrue' pour le premier lancement et' testFalse' pour les autres? – Vyacheslav

+1

Correct. La première ligne du journal est testFalse –

Répondre

5

Vous ne pouvez pas utiliser performSegue() depuis viewDidLoad(). Déplacez-le à viewDidAppear().

Lors de l'affichage de viewDidLoad(), la vue en cours n'est même pas encore attachée à la fenêtre, il n'est donc pas encore possible de l'intégrer.

+0

Merci Smartcat. Déplacé le code à ViewDidAppear() et cela fonctionne bien maintenant! –

0

Vous pouvez également utiliser une approche différente - changer la fenêtre principale de rootViewController au contrôleur de vue de votre choix en fonction de isFirstLaunch booléen

UIApplication.shared.keyWindow?.rootViewController = setPasswordViewController

0

Je pense que vous pouvez aussi mettre votre Segue dans un Dispatch.main.async

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