什么时候Segue目的地呼叫viewDidAppear?

时间:2017-12-31 22:13:13

标签: ios xcode9 lldb

    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中的错误之前都没有触发。

有什么建议吗?

1 个答案:

答案 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;你可能应该重新思考这个并且防守代码。如果foldernil,则有条件地解包并显示相应的错误消息。