使用 CoreData 时出现 NSFetchedResultsController 致命错误(尝试获取)

Posted

技术标签:

【中文标题】使用 CoreData 时出现 NSFetchedResultsController 致命错误(尝试获取)【英文标题】:NSFetchedResultsController Fatal Error When Working with CoreData (Attempt Fetch) 【发布时间】:2017-02-15 20:49:41 【问题描述】:

我的应用程序崩溃并给我一个致命的错误,它并没有真正告诉我任何事情,所以我不知道会发生什么。

这是给我带来麻烦的代码部分。

var controller: NSFetchedResultsController<Item>!


func attemptFetch() 

    let fetchRequest:  NSFetchRequest<Item> = Item.fetchRequest()
    let dateSort = NSSortDescriptor(key: "created", ascending: false)
    fetchRequest.sortDescriptors = [dateSort]

    let mainController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)

    self.controller = mainController

    do 
        try mainController.performFetch()
     catch 

        let error = error as NSError
        print("\(error)")

    


它崩溃了

let mainController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)

并且“上下文”正在引用应用委托

let ad = UIApplication.shared.delegate as! AppDelegate
let context = ad.persistentContainer.viewContext

错误是:

致命错误:未解决的错误 Error Domain=NSCocoaErrorDomain Code=134140 "(null)" UserInfo=sourceModel=() isEditable 1,entities “应用委托的第 70 行崩溃”

感谢您的帮助

【问题讨论】:

controller (NSFetchedResultsController) 应该是 Apple 在 Core Data 模板中建议的类中的惰性实例化属性。 @vadian 你能提供苹果文档的链接吗?它说它应该是惰性实例化的? 只需创建一个启用 Core Data 的新(Master-Detail)项目并研究提供的代码。 @vadian 我知道演示产品的外观,但是关于它应该是怎样的文档在哪里,并且不进行惰性实例化应该有什么不同?我是出于个人兴趣而问的,因为我没有在任何地方读过这篇文章,如果你说的是真的,我可能不得不在我自己的项目中重做一些工作。但据我所知,一切对我来说都很好。 ***.com/questions/18150816/… 【参考方案1】:

由于您在 AppDelegate 方法中运行此提取,我怀疑您正在尝试执行您的 fetch before CoreData Persistent Store 并且它的上下文已初始化导致崩溃.

【讨论】:

以上是关于使用 CoreData 时出现 NSFetchedResultsController 致命错误(尝试获取)的主要内容,如果未能解决你的问题,请参考以下文章

保存数据时出现问题,将 CoreData 与 SwiftUI 一起使用

使用 CoreData 时出现 NSFetchedResultsController 致命错误(尝试获取)

对 CoreData 执行添加/更新时出现问题

读取 CoreData 时出现罕见错误:CoreData 结果中的 data:<fault>

集成 RestKit 和 MagicalRecord 时出现 CoreData 轻量级迁移错误

从 CoreData 获取数据时出现“'[AnyObject]' 不可转换为 '[Dog]?'”错误