使用 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 结果中的 data:<fault>