【问题标题】:How to debug 'fatal error: unexpectedly found nil while unwrapping an Optional value'如何调试“致命错误:在展开可选值时意外发现 nil”
【发布时间】:2015-03-25 08:41:16
【问题描述】:

Stack Overflow 上有很多与此错误相关的问题。我在how Optionals workerror in particular 上阅读了一些出色的帖子。但是,我还没有找到任何关于确定哪个值被设置为 nil 并首先导致错误的最佳方法的信息。

有没有什么好的调试技术可以找出是哪个 Optional 导致了这个错误?

【问题讨论】:

    标签: ios iphone swift


    【解决方案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

      【讨论】:

        猜你喜欢
        • 2016-01-26
        • 2016-02-29
        • 2020-09-19
        • 2016-01-08
        相关资源
        最近更新 更多