如何调试“致命错误:在展开可选值时意外发现 nil”
Posted
技术标签:
【中文标题】如何调试“致命错误:在展开可选值时意外发现 nil”【英文标题】:How to debug 'fatal error: unexpectedly found nil while unwrapping an Optional value' 【发布时间】:2015-03-25 08:41:16 【问题描述】:Stack Overflow 上有很多与此错误相关的问题。我在how Optionals work 和error in particular 上阅读了一些出色的帖子。但是,我还没有找到任何关于确定哪个值被设置为 nil 并首先导致错误的最佳方法的信息。
有没有什么好的调试技术可以找出是哪个 Optional 导致了这个错误?
【问题讨论】:
【参考方案1】:这里至少有一半的答案(请其他受访者先阅读问题!):使用模拟器而不是实际的 ios 设备。
调试器似乎非常擅长指出导致问题的恶意可选选项的行...除非您像我一样,不时选择直接在 iOS 设备上运行代码。在后一种情况下,调试器将我置于一些汇编代码的中间,而没有明显的堆栈跟踪。切换回模拟器会给出错误的确切代码行。
【讨论】:
谢谢,太好了。很高兴知道! 这是我需要知道的。我知道 what 问题出在哪里,但我需要弄清楚问题出在 哪里 才能解决它,而且我在盲目猜测时设置的断点都没有被击中了。 为我工作。 Xcode 有时就是这样……这有技术原因吗?【参考方案2】:您的 Xcode 没有在错误的代码行处崩溃?
这不是对问题的回应,但重要的是要注意:
When you are not sure about an optional variable, you have to verify if it contains value or not, by using a pattern like this:
var myOptional : String?
if let aString = myOptional
//do your work with aString.
【讨论】:
【参考方案3】:什么是基本的可选值?当你放置?在一个可选的数据类型之后,如果它被解包并且出现 nil,则没有错误,但你放置“!”数据类型后有感叹号,然后如果它解包变量并出现 nil 则存在崩溃或错误,因此经常使用 optional as
var myVariable : DataType ? = DataType()
or
var myVariable : DataType ? = nil
or
var myVariable : DataType ? = value
Swift 中的可选项是一个变量,它可以保存一个值,也可以不保存值。可选项是通过附加一个 ?类型:
var myOptionalString:String? = "Hello"
有些地方可选项很有用:
当属性可以存在或不存在时,例如 middleName 或配偶 在 Person 类中 当一个方法可以返回一个值或什么都不返回时,例如 在数组中搜索匹配项 当方法可以返回结果或得到错误时 不返回任何内容 委托属性(不必总是设置) 用于类中的弱属性。他们指向的东西可以 设为 nil 对于可能必须释放到的大型资源 回收内存https://medium.com/@rrridges/swift-optionals-a10dcfd8aab5
【讨论】:
以上是关于如何调试“致命错误:在展开可选值时意外发现 nil”的主要内容,如果未能解决你的问题,请参考以下文章