代码之家  ›  专栏  ›  技术社区  ›  TimOnTheLeftCoast

Segue Destination Call ViewDid何时出现?

  •  0
  • TimOnTheLeftCoast  · 技术社区  · 8 年前
        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正在触发ViewDid显示在destination view controller中。在传递文件夹之前,目标中的ViewDid出现致命错误。我知道任何初始值设定项代码都必须运行(确实如此——根据lldb e命令可以正确初始化几个字段)。在prepareForSegue完成之前调用viewDidAppear是没有意义的。

    我在strategyPicker上有断点。在目标视图中出现错误之前,文件夹分配和NSLog都不会触发。

    有什么建议吗?

    1 回复  |  直到 8 年前
        1
  •  2
  •   Paulw11    8 年前

    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 那里您可能应该重新考虑这一点,并防御性地编写代码。有条件地展开并显示适当的错误消息,如果 文件夹 nil .