【发布时间】:2017-02-02 12:14:01
【问题描述】:
我正在使用抽象类的 fetchRequest 实例化 NSFetchedResultsController:
private func setupFetchController() {
let fetchRequest : NSFetchRequest<NSFetchRequestResult> = SearchEntity.fetchRequest()
let fetchController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)
self.fetchController = fetchController
}
SearchEntity 是Person 和Group 的抽象父类。我用它来获取 2 个带有 1 个NSFetchedResultsController 的实体。但是,调用此函数时应用程序崩溃:
libc++abi.dylib:以 NSException 类型的未捕获异常终止
我已将范围缩小到取消注释和评论 NSFetchedResultsController 的创建。我还有两个功能完全相同的功能。
我在做什么/出了什么问题?
编辑:添加到此。我可以通过使用context.performFetch(...) 手动获取SearchEntity,这给了我正确的结果。然而,因此得名,我要搜索它,所以我需要能够有效地更新。
编辑2:
其他地方正在运行的相同功能示例:
private func setupFetchController() {
let fetchRequest : NSFetchRequest<NSFetchRequestResult> = Person.fetchRequest()
// Sort Persons
let sortDescriptor = NSSortDescriptor(key: "firstName", ascending: true)
let sortDescriptor2 = NSSortDescriptor(key: "lastName", ascending: true)
fetchRequest.sortDescriptors = [sortDescriptor, sortDescriptor2]
// Filter Persons (only iType = 1)
let predicate = NSPredicate(format: "iType == %i", 1)
fetchRequest.predicate = predicate
// Create the FetchController
let fetchController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: "sectionName", cacheName: nil)
self.fetchController = fetchController
}
【问题讨论】:
-
您说:“我还有 2 个这样的功能,它们的工作风格完全相同。”您是什么意思?并且这两个功能是同一类型?我的意思是它们是 FRC 函数?
-
我会将它们添加到 OP,它们也在实例化 FetchResultsController 但具有不同的实体。
-
唯一的区别是不添加 sortDescriptors / predicates
-
他们按预期工作?
-
设置异常断点。您将得到原因和明确的错误消息:NSFetchedResultsController 的实例需要带有排序描述符的获取请求
标签: swift core-data nsfetchedresultscontroller