2016-10-10 3 views
0

Ich habe eine if ... then-Anweisung in der ViewDidLoad-Methode für die Ansicht, die als meine Storyboard-Einstiegspunkt fungiert.Segue funktioniert nicht, und ich kann nicht herausfinden, warum

Grundsätzlich überprüfe ich, ob Daten in den Kerndaten vorhanden sind, um anzuzeigen, dass sie ein kleines "Setup-Formular" ausgefüllt haben.

Wenn festgestellt wird, dass die Kerndaten leer sind oder dass die App nicht richtig eingerichtet wurde, möchte ich, dass sie automatisch in die Einstellungsansicht mit einem Übergang umgeleitet wird.

Meine ViewDidLoad Methode sieht wie folgt aus:

override func viewDidLoad() { 
    super.viewDidLoad() 

    //Get any entries from the App Settings Entity 
    getAppSettings() 


    //If any entries are found, check to see if the setup has been completed 
    if (appSettings.count > 0) { 

     print("We found entries in the database for App Settings") 

     if (appSettings[0].setupComplete == false) { 
      print("Setup has not been completed") 
      self.performSegue(withIdentifier: "toAppSettings", sender: self) 
     } else { 
      print("Setup is completed") 
      //Load the settings into global variables 
      preferredRegion = appSettings[0].region! 
      usersName = appSettings[0].usersName! 
     } 

    } else { 
     print("We found no entries in the database for App Settings") 
     self.performSegue(withIdentifier: "toAppSettings", sender: self) 
    } 
} 

Ich stellte sicher, dass der Übergang nicht vorhanden ist, und dass die Kennung für die Segue ist genau so, wie ich es in Anführungszeichen (ich selbst kopiert & alle geklebt Instanzen davon, um sicherzustellen, dass sie alle konsistent sind).

Ich ging auch die extra Meile und legte einen Kontrolleur in der „Vorbereitung für Segue“ -Methode, ob es drucken wurde immer genannt, und wer der Absender war:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    print("We're getting ready to segue!") 
    print(segue.identifier) 
} 

Beide dieser Artikel gedruckt werden zu dem Protokoll, das mir sagt, dass das Segment erkannt wird und dass die App versucht, es auszulösen. Aber - aus irgendeinem Grund, den ich nicht herausfinden kann - es feuert einfach nicht.

Irgendwelche Ideen, was mir hier fehlt?

Antwort

2

Ich habe eine if ... then-Anweisung in den ViewDidLoad

Aber das ist das Problem. viewDidLoad ist viel zu früh dafür. Denken Sie daran, dass viewDidLoad bedeutet, dass Ihr View-Controller eine Ansicht hat. Das ist alles was es bedeutet. Diese Ansicht befindet sich noch nicht in der Schnittstelle und der View-Controller selbst ist möglicherweise nicht einmal in der Ansichtshierarchie! Es sitzt nur da draußen im Objektraum. Sie können nicht von hier abgehen; Es gibt nichts, von dem man weggehen könnte.

Versuchen Sie, bis viewDidAppear warten. Wenn das funktioniert, können Sie versuchen, es zurück zu viewWillAppear zu verschieben, aber ich garantiere nichts. Beachten Sie, dass diese Methoden mehrere Male aufgerufen werden können. Daher benötigen Sie möglicherweise eine Markierung, um sicherzustellen, dass dieser Abschnitt nur einmal ausgelöst wird.

Verwandte Themen