Obj-C 框架返回 nil,并让我的 Swift 代码崩溃,说“致命错误:在展开可选值时意外发现 nil”
Posted
技术标签:
【中文标题】Obj-C 框架返回 nil,并让我的 Swift 代码崩溃,说“致命错误:在展开可选值时意外发现 nil”【英文标题】:Obj-C frameworks returns nil, And crashes my Swift Code saying 'fatal error: unexpectedly found nil while unwrapping an Optional value' 【发布时间】:2015-04-09 08:28:33 【问题描述】:我正在使用一个用 Obj-C 编写的第三方框架,它有一个功能:
- (NSError *)generateModelForm
If this method is successful it will return nil. If it doesn't return nil, it will return an error which you can check for debugging purposes.
现在,当我在我的 Swift 文件中使用桥接头调用此函数并执行所有必需的操作时,它总是在第一行崩溃说“致命错误:在展开可选值时意外发现 nil”
我的 Swift 代码:
if let error = object.generateModelForm()
println("Error : \(error)")
else
println("Successfully generated model form, proceed ahead.")
我已经阅读了关于此link 的描述。但这对我几乎没有帮助,因为我使用的函数是用 Obj-C 编写的预定义框架的一部分。
我尝试将第一行替换为,
let error = object.generateModelForm() as NSError?
let error : NSError? = object.generateModelForm()
另外,即使尝试直接调用object.generateModelForm()
,不捕获返回的NSError值,它仍然会崩溃。
过去 2 天我一直在摸索,如果有任何帮助,将不胜感激。
【问题讨论】:
当您访问它的方法时,您确定该对象不是 nil 吗? 是的..我很确定,因为我在崩溃之前使用了很多次..甚至能够使用框架的其余方法。 !! 设置断点并确认object
不为零。这是唯一有意义的解释
@Paulw11 做到了,对象不是零。
'object' 是可选的吗?尝试 object?.generateModelForm() ...* 使用 '?' ...
【参考方案1】:
如果 'object' 是可选的,请尝试 object?.generateModelForm()
... 使用 '?'。
【讨论】:
【参考方案2】:如果你一直在使用 Swift 1.1,你应该在执行 if let 时解包
if let error = object.generateModelForm()?
//do stuff
请注意,如果您刚刚为 if 块内的范围创建的常量变量实际上是一个未包装的现有对象,则 if let 只允许您执行操作。您尝试做的是将可选设置为非可选
Swift 1.2(从今天 2015 年 4 月 9 日起可与 Xcode 6.3 一起使用)您不需要添加它,但如果您想将其转换为 NSError
if let error = object.generateModelForm() as? NSError
//do stuff
【讨论】:
以上是关于Obj-C 框架返回 nil,并让我的 Swift 代码崩溃,说“致命错误:在展开可选值时意外发现 nil”的主要内容,如果未能解决你的问题,请参考以下文章
UIView 类中的 CollectionView IBOutlet 返回 nil - 只是有时?
防止 Obj-C 代码将 `nil` 传递给具有非可选参数的 Swift 方法