【问题标题】:value is not nil but getting unexpectedly found nil while unwrapping an Optional valuevalue 不是 nil,而是在展开 Optional 值时意外发现 nil
【发布时间】: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 .. 那么我该如何解决它

标签: ios objective-c swift watchkit


【解决方案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 中的标签断开连接......我认为这是问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多