实例化以未捕获的异常终止的NSFetchedResultsController

时间:2017-02-02 12:14:02

标签: swift core-data nsfetchedresultscontroller

我使用抽象类的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
}

SearchEntityPersonGroup的抽象父类。我使用它来获取2个{1}的实体。但是,当调用此函数时,应用程序崩溃:

  

libc ++ abi.dylib:以NSException类型的未捕获异常终止

我已将其缩小到取消注释并评论NSFetchedResultsController的创建。我还有两个这样的功能,它们的风格完全相同。

我在做什么/出错了?

编辑:添加到此。我只需使用NSFetchedResultsController即可手动获取SearchEntity,这样可以获得正确的结果。但是,因此名称,我将搜索它,所以我需要能够有效地更新。

edit2:

其他功能相同的功能示例:

context.performFetch(...)

1 个答案:

答案 0 :(得分:5)

您得到异常,因为至少需要一个排序描述符。

来自documentation

  

您通常会创建NSFetchedResultsController的实例   表视图控制器的实例变量。初始化时   获取结果控制器,您提供了四个参数:

     

1)获取请求。 必须包含至少一个排序描述符   订购结果

     

2)托管对象上下文。控制器使用此上下文来执行   获取请求。

     

3)(可选)返回结果对象的关键路径   名称。控制器使用密钥路径将结果拆分为   部分(传递nil表示控制器应生成一个   单节)。

     

4)(可选)控制器应使用的缓存文件的名称   (传递nil可防止缓存)。使用缓存可以避免开销   计算部分和索引信息。