我是Swift
的新手,我正在尝试学习一些Core Data
相关方法。我需要获取一些实体,这是我调用的方法的代码片段:
let results = context.executeFetchRequest(fetchRequest, error: &error) as! [MyCustomEntity]?
if let myEntities = results {
let lastEntity = myEntities.last!
return lastEntity.entityNum.integerValue
}
当我运行应用程序时,它在let lastEntity = myEntities.last!
行崩溃,我在控制台中收到此消息:
致命错误:在解包可选值时意外发现nil
但是,此时error
为nil
。我按照一个例子来编写代码,据我所知,if
语句块只应在有结果的情况下执行......对吗?那是怎么回事?
提前致谢
答案 0 :(得分:0)
我假设你接收的数组是空的。您正确使用可选绑定来确定是否收到数组,但这并不能保证您在数组中有元素。
last
上的Array
方法返回一个Optional;当数组为空时,它返回nil
:
/// The last element, or `nil` if the array is empty
var last: T? { get }
您正在从myEntities.last
解包返回值,这意味着当myEntities
为空数组时,您的应用会崩溃。
为了使此代码安全,您还需要检查last
方法的返回值。