2017-12-31 148 views
0

Beim Versuch, in lldb zu debuggen, scheint es, dass die Zuweisung von segue.destination den viewDidAppear im Zielansicht-Controller auslöst. Ich erhalte einen schwerwiegenden Fehler in viewDidAppear im Ziel, bevor der Ordner übergeben wird. Ich verstehe, dass jeder Initialisierungscode ausgeführt werden muss (und es tut - ein paar Felder werden entsprechend den lldb-Befehlen korrekt initialisiert). Es macht einfach keinen Sinn, dass der viewDidAppear aufgerufen wird, bevor prepareForSegue fertig ist.Wann wird das Segue-Ziel viewDidAppear aufgerufen?

Ich habe Haltepunkte in der Zuweisung von strategyPicker.folder und NSLog und keiner löst vor dem Fehler in der ZielansichtDidAppear.

Irgendwelche Ratschläge?

Antwort

2

viewDidLoad/viewWillAppear/viewDidAppear werden nicht aufgerufen, bevor prepare(for:sender:) aufgerufen wird.

Die von Ihnen angezeigte Funktion wird nicht aufgerufen, da sie nicht über die richtige Methodensignatur verfügt. Sie wollen

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if let strategyPicker=segue.destination as? StrategyViewController { 
     strategyPicker.folder=self.folder 
     NSLog("Tried to pass \(self.folder) into \(String(describing: strategyPicker.folder))") 
    } 
} 

Auch, weil Sie einen Absturz in Ihrem Ziel-View-Controller erwähnt, ist es wahrscheinlich, dass Sie sind kraft Abwickeln folder dort; Sie sollten dies wahrscheinlich überdenken und defensiv codieren. Bedingungslos auspacken und eine entsprechende Fehlermeldung anzeigen, wenn foldernil ist.

+0

Entschuldigung! Der Code wurde in Swift 2 geschrieben, durch Swift 3 ignoriert und manuell - falsch - in Swift 4 konvertiert. – TimOnTheLeftCoast

Verwandte Themen