首页 文章

使用NSFetchedResultsController使用基于时间的瞬态属性

提问于
浏览
0

我有 Event 型号 startDateendDate . 我想将此事件分为3类 .

  • 当前:startDate <今天<endDate

  • 即将到来:今天<startDate

  • 过去:endDate <今天

我做了一个名为 status 的瞬态属性包含上面的逻辑并在 NSFetchedResultsController 中使用它作为参数

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

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

CoreData:error:(NSFetchedResultsController)索引2处的获取对象具有乱序部分名称“1” . 对象必须按节名称排序'

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

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

问题是此部分是从2个属性确定的,因此它不能仅按 startDateendDate 进行排序,而是两者兼而有之 .

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

1 回答

  • 0

    如果由SQLite支持,则无法对瞬态属性进行排序(这是常见情况) . 后端必须将您的排序请求转换为SQL查询,并且查询赢得't have access to transient properties. You either have to make status non-transient or you can' t使用 NSFetchedResultsController .

    有关更多信息,请参阅Core Data Programming Guide: Advanced Topics: Fetch Predicates and Sort Descriptors .

    此外,您无法使用SQLite存储对瞬态属性进行排序 .

相关问题