Xcode 我如何在swift代码中找到我';我不安全地打开一个可选的包?

Xcode 我如何在swift代码中找到我';我不安全地打开一个可选的包?,xcode,swift,uisplitviewcontroller,Xcode,Swift,Uisplitviewcontroller,故障发生时标记的代码直接来自苹果的Lister示例代码: var window: UIWindow! 当我尝试运行代码时,它给出了一个错误:“致命错误:在展开可选值时意外发现nil”。通过使用断点,我可以看出,在第一次运行时,wind仍然为零,但这对于简单的示例项目来说不是问题。 因为它是在示例代码中执行的,所以在splitview的一个子视图中似乎有什么问题。我的想法是对的吗?如果是,调试器中是否有一种很好的方法来查找发生了什么,或者哪种可选的方法是我的问题?[编辑:我刚刚看到了这个问题的

故障发生时标记的代码直接来自苹果的Lister示例代码:

var window: UIWindow!

当我尝试运行代码时,它给出了一个错误:“致命错误:在展开可选值时意外发现nil”。通过使用断点,我可以看出,在第一次运行时,wind仍然为零,但这对于简单的示例项目来说不是问题。

因为它是在示例代码中执行的,所以在splitview的一个子视图中似乎有什么问题。我的想法是对的吗?如果是,调试器中是否有一种很好的方法来查找发生了什么,或者哪种可选的方法是我的问题?

[编辑:我刚刚看到了这个问题的时代,但也许其他人会发现它很有用]

这只是一个猜测,但您应该检查窗口和插座之间的interface builder连接。在调用windowDidLoad之前,您必须检查是否访问此函数

正如@jtbandes所述,失败是隐式展开的选项在为零时的期望行为。 因此,您必须检查window是否为nil,例如,执行以下操作:

var splitViewController: UISplitViewController {
  return window?.rootViewController as UISplitViewController
}

我现在不知道如果这个函数返回nil会发生什么。我想您必须声明它才能返回可选的UISplitViewController以使编译器静音。

您是否尝试过中断异常?是的,它仍然在相同的位置以相同的方式失败。否,我的意思是中断异常以查找错误发生的位置!是的,我打开了一个异常断点。调试器应该已经在错误时停止。如果
window
为nil,则使用它是一个错误,这就是隐式展开选项的工作方式。为什么不先检查一下,或者确保这个代码在配置完窗口后才运行?
var splitViewController: UISplitViewController {
  return window?.rootViewController as UISplitViewController
}