Swift 中的 executeFetchRequest 致命错误

Posted

技术标签:

【中文标题】Swift 中的 executeFetchRequest 致命错误【英文标题】:executeFetchRequest fatal error in Swift 【发布时间】:2015-08-13 13:46:46 【问题描述】:

我是Swift 的新手,我在写一些Core Data 相关的方法时正在努力学习。我需要获取一些实体,这是我调用的方法的代码 sn-p:

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

但是,此时errornil。我按照示例编写了该代码,据我了解,if 语句块只有在有结果时才应执行......对吗?那里发生了什么?

提前致谢

【问题讨论】:

【参考方案1】:

我假设您收到的数组是空的。您正确地使用了可选绑定来确定您是否接收到一个数组,但这并不能保证您在数组中有元素。

Array 上的 last 方法返回一个 Optional;当数组为空时返回nil

/// The last element, or `nil` if the array is empty
var last: T?  get 

您正在解开来自myEntities.last 的返回值,这意味着当myEntities 为空数组时,您的应用会崩溃。

为了使这段代码安全,您还需要检查last 方法的返回值。

【讨论】:

以上是关于Swift 中的 executeFetchRequest 致命错误的主要内容,如果未能解决你的问题,请参考以下文章

Swift 4 或 Swift 5 中的 UITextView 用户输入文本验证:限制 Swift 中的特定字符

swift: Swift 中的 SnapKit 不起作用

swift中的 isKindofClass

swift Swift中的变量

swift Swift中的数组

swift SWIFT中的变量