使用NSFetchedResultsController

时间:2016-07-14 18:37:45

标签: ios core-data nsfetchedresultscontroller

我的Event模型包含startDateendDate。我想将此事件分为3类。

  • 当前:startDate<今天<结束日期
  • 即将到来:今天<的startDate
  • 过去:endDate<今天

我创建了一个名为status的瞬态属性包含上述逻辑,并将其用作NSFetchedResultsController

中的参数
  

NSFetchedResultsController(fetchRequest:fetchRequest,   managedObjectContext:self.managedObjectContext,sectionNameKeyPath:   " status",cacheName:nil)

当我运行时,我收到此错误,告诉我使用section作为排序描述符。

  

CoreData:error:(NSFetchedResultsController)获取的对象at   索引2具有无序部分名称' 1。对象必须按顺序排序   部分名称'

然后我在排序描述符中设置它并得到此错误,因为瞬态不能用作排序描述符。

  

由于未捕获的异常而终止应用   ' NSInvalidArgumentException',原因:'未找到密钥路径状态   实体'

问题在于此部分是根据2个属性确定的,因此它不能仅按startDateendDate排序,而是两者兼而有之。

解决此问题的最佳方法是什么?我已经考虑过将此状态设置为非瞬态,但是这个值每天都会更新,我认为让它非瞬态变得有些奇怪。

1 个答案:

答案 0 :(得分:0)

如果由SQLite支持,则

NSFetchedResultsController无法对瞬态属性进行排序(这是常见情况)。后端必须将您的排序请求转换为SQL查询,并且查询无法访问瞬态属性。您要么必须使状态为非瞬态,要么您不能使用NSFetchedResultsController

有关详情,请参阅Core Data Programming Guide: Advanced Topics: Fetch Predicates and Sort Descriptors

  

此外,您无法使用SQLite商店对瞬态属性进行排序。