【问题标题】:Using time based transient property with NSFetchedResultsController将基于时间的瞬态属性与 NSFetchedResultsController 一起使用
【发布时间】:2016-11-17 19:39:17
【问题描述】:

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

  • 当前:开始日期
  • 即将到来:今天
  • 过去:endDate

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

NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext:self.managedObjectContext,sectionNameKeyPath: “状态”,缓存名称:无)

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

CoreData: error: (NSFetchedResultsController) 获取的对象在 索引 2 有一个乱序的部分名称 '1。对象必须按 部分名称'

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

由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因:'keypath status not found in 实体'

问题是这部分是从 2 个属性中确定的,因此不能仅按 startDateendDate 排序,而是两者都排序。

解决此问题的最佳方法是什么?我考虑过让这个状态成为非瞬态的,但是这个值每天都会更新,我觉得让它成为非瞬态有点奇怪。

【问题讨论】:

    标签: ios core-data nsfetchedresultscontroller


    【解决方案1】:

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

    请参阅Core Data Programming Guide: Advanced Topics: Fetch Predicates and Sort Descriptors 了解更多信息。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-01
      • 2023-03-19
      • 2016-03-31
      • 1970-01-01
      • 1970-01-01
      • 2012-05-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多