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的主要内容,如果未能解决你的问题,请参考以下文章
在NSCoder中展开Optional值时,意外地发现了nil