Segue Destination 何时调用 viewDidAppear?

When Does the Segue Destination Call viewDidAppear?

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

有什么建议吗?

在调用 prepare(for:sender:) 之前未调用

viewDidLoad/viewWillAppear/viewDidAppear

您显示的函数没有被调用,因为它没有正确的方法签名。你要

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.

,则有条件地展开并显示适当的错误消息