2017-12-31 250 views
0
func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    let strategyPicker=segue.destination as! StrategyViewController 
    strategyPicker.folder=self.folder 
    NSLog("Tried to pass \(self.folder) into \(String(describing: strategyPicker.folder))") 
} 

lldbでデバッグしようとすると、segue.destinationを割り当てるだけで、宛先ビューコントローラでviewDidAppearがトリガされているようです。フォルダを渡す前に、宛先のviewDidAppearに致命的なエラーが発生します。私はイニシャライザコードを実行しなければならないことを理解しています(そして、いくつかのフィールドはlldb eコマンドに従って正しく初期化されます)。 prepareForSegueが終了する前にviewDidAppearが呼び出されただけでは意味がありません。Segue Destination Callはいつ表示されますか?

ターゲットviewDidAppearのエラーの前に、strategyPicker.folderの割り当てとNSLogのどちらにもブレークポイントがあり、どちらもトリガーしません。

アドバイスはありますか?

答えて

2

viewDidLoad/viewWillAppear/viewDidAppearは、prepare(for:sender:)が呼び出される前に呼び出されません。

表示されている機能は、正しいメソッドシグネチャがないため呼び出されていません。あなたは、あなたの先のビューコントローラでクラッシュを言及するので、あなたが力アンラップがfolderをしている可能性があり、また、

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))") 
    } 
} 

をしたいです。あなたはおそらくこれを再考し、防御的にコードするべきです。条件付きで解凍し、foldernilの場合、適切なエラーメッセージを表示します。

+0

謝罪!コードはSwift 2で書かれ、Swift 3で無視され、手動で間違ってSwift 4に変換されました。 – TimOnTheLeftCoast

関連する問題