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

我有startDateendDate Event模型。 我想将这个事件分为3类。

  • 当前:startDate <今天<endDate
  • 即将到来:今天<startDate
  • 过去:endDate <今天
  • 我创建了一个名为status的瞬态属性,其中包含上面的逻辑,并将其用作NSFetchedResultsController参数

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

    当我运行时,我得到了这个错误,告诉我使用段作为排序描述符。

    CoreData:error:(NSFetchedResultsController)索引2处的获取对象的乱序部分名称为'1'。 对象必须按节名称'

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

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

    问题是这个部分是由2个属性决定的,所以它不能通过startDateendDate排序,但是两者都可以。

    解决这个问题的最好方法是什么? 我已经考虑让这种状态变成非暂时性的,但是这个值每天都会更新,我认为让它变成非瞬态是很奇怪的。


    NSFetchedResultsController由SQLite支持(通常情况下),它不能对它进行排序。 后端必须将您的排序请求转换为SQL查询,并且查询将无法访问瞬态属性。 您必须使状态为非瞬态状态,否则无法使用NSFetchedResultsController

    请参阅核心数据编程指南:高级主题:获取谓词和对描述符进行排序以获取更多信息。

    另外,您不能使用SQLite存储对瞬态属性进行排序。

    链接地址: http://www.djcxy.com/p/36123.html

    上一篇: Using time based transient property with NSFetchedResultsController

    下一篇: Fetched results controller sectionIndexTitle based on transient attributes