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是没有意义的。
我在strategyPicker.folder赋值和NSLog上有断点,并且在目标viewDidAppear中的错误之前都没有触发。
有什么建议吗?
答案 0 :(得分:2)
viewDidLoad
之前,不会调用 viewWillAppear
/ viewDidAppear
/ prepare(for:sender:)
。
您所显示的功能未被调用,因为它没有正确的方法签名。你想要
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))")
}
}
此外,由于您在目标视图控制器中提到了崩溃,因此很可能是您在那里强制解包folder
;你可能应该重新思考这个并且防守代码。如果folder
为nil
,则有条件地解包并显示相应的错误消息。