value 不是 nil,而是在展开 Optional 值时意外发现 nil

Posted

技术标签:

【中文标题】value 不是 nil,而是在展开 Optional 值时意外发现 nil【英文标题】:value is not nil but getting unexpectedly found nil while unwrapping an Optional value 【发布时间】:2016-01-19 11:04:09 【问题描述】:

我正在尝试将一些数据从数组发送到另一个 interfaceController。问题是我得到了

在展开可选值异常时意外发现 nil

即使数组不是零。事实上,我什至可以使用

打印结果

打印(...)。

问题是我不能将此结果设置为标签而不得到异常。

这是我用上下文数据嘲笑新 interfaceController 的代码

@IBAction func lauchInterfaceClick() 

    presentControllerWithName("SecondInterface", context: ["hi","how are you"])


然后在 SecondInterface 中检索结果,如下所示

override func awakeWithContext(context: AnyObject?) 
    super.awakeWithContext(context)

    // Configure interface objects here.
    if context != nil

        let somevalue = context as! [String]

        // here is where I getting the exception, in addition to Thread 1: EXC_BAD_INSTRUCTION (code=EXC_i386_INVOP, subcode=0x0)
        self.showWat.setText(String(somevalue[0]))

        // I have also tried this
        // self.showWat.setText(somevalue[0])

     

请注意,另一方面,print(String(somevalue[0])) 输出 hi

【问题讨论】:

尝试打印somevalue 这里有一百万个关于这个错误的问题,你确定他们都没有为你提供解决方案吗? 您收到错误是因为 showWat 为零,而不是数组。 @aaisataev showWat 是一个 WKInterfaceLabel, @CihanTek 怎么可能? showWat 是一个 WKInterfaceLabel .. 那么我该如何解决它 【参考方案1】:

我会像这样使用awakeWithContext(context: AnyObject?) 的实现:

override func awakeWithContext(context: AnyObject?) 
    super.awakeWithContext(context)

    // Configure interface objects here.
    if context != nil

        let somevalue = context as? [String] 
            if somevalue.count > 0 
                let text = somevalue[0]
                showWat.setText(text)
            


         else 

            // Unwrapped optional is nil
            print("someValue is nil!")
        

    

查看Swift Programming Language Reference 中的“可选链接作为强制展开的替代方法”部分。

或在堆栈溢出时查看此answer。

【讨论】:

好的,你得到了什么结果?你能确认哪个对象是 nil 吗?我猜 showWat 是 nil。 我遇到了同样的异常。但是,当我像 self.showWat.setText("hi") 那样直接分配值时,它可以完美地工作 if somevalue.count > 0 let text = somevalue[0] showWat.setText(text) 然后试试: if showWat != nil showWat.setText(text) 你需要找出什么 optional 是 nil。 对不起,伙计们..我刚刚发现我将 wkInterfaceLabel 与 interfaceController 中的标签断开连接......我认为这是问题

以上是关于value 不是 nil,而是在展开 Optional 值时意外发现 nil的主要内容,如果未能解决你的问题,请参考以下文章

在展开可选值时发现 nil,附加到数组,Swift 3

在NSCoder中展开Optional值时,意外地发现了nil

Swift:在展开可选值时发现 nil

CoreDataStack 中的 ManagedObjectContext 在展开后返回 nil

使用首选默认值展开数组

dataTask 在展开可选值时意外发现 nil