我使用抽象类的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}的实体。但是,当调用此函数时,应用程序崩溃:
libc ++ abi.dylib:以NSException类型的未捕获异常终止
我已将其缩小到取消注释并评论NSFetchedResultsController
的创建。我还有两个这样的功能,它们的风格完全相同。
我在做什么/出错了?
编辑:添加到此。我只需使用NSFetchedResultsController
即可手动获取SearchEntity
,这样可以获得正确的结果。但是,因此名称,我将搜索它,所以我需要能够有效地更新。
edit2:
其他功能相同的功能示例:
context.performFetch(...)
答案 0 :(得分:5)
您得到异常,因为至少需要一个排序描述符。
您通常会创建
NSFetchedResultsController
的实例 表视图控制器的实例变量。初始化时 获取结果控制器,您提供了四个参数:1)获取请求。 必须包含至少一个排序描述符 订购结果。
2)托管对象上下文。控制器使用此上下文来执行 获取请求。
3)(可选)返回结果对象的关键路径 名称。控制器使用密钥路径将结果拆分为 部分(传递nil表示控制器应生成一个 单节)。
4)(可选)控制器应使用的缓存文件的名称 (传递
nil
可防止缓存)。使用缓存可以避免开销 计算部分和索引信息。