在NSFetchedResultsController中使用基于时间的瞬态属性
我有startDate
和endDate
Event
模型。 我想将这个事件分为3类。
我创建了一个名为status
的瞬态属性,其中包含上面的逻辑,并将其用作NSFetchedResultsController
参数
NSFetchedResultsController(fetchRequest:fetchRequest,managedObjectContext:self.managedObjectContext,sectionNameKeyPath:“status”,cacheName:nil)
当我运行时,我得到了这个错误,告诉我使用段作为排序描述符。
CoreData:error:(NSFetchedResultsController)索引2处的获取对象的乱序部分名称为'1'。 对象必须按节名称'
然后我将它设置为排序描述符,并得到这个错误,因为瞬态不能用作排序描述符。
由于未捕获异常'NSInvalidArgumentException'而终止应用程序,原因:'在实体中未找到keypath状态'
问题是这个部分是由2个属性决定的,所以它不能通过startDate
或endDate
排序,但是两者都可以。
解决这个问题的最好方法是什么? 我已经考虑让这种状态变成非暂时性的,但是这个值每天都会更新,我认为让它变成非瞬态是很奇怪的。
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