瞬态sectionNameKeyPath& NSSortDescriptor NSFetchedResultsController

时间:2012-05-07 12:12:42

标签: iphone objective-c xcode nsfetchedresultscontroller

我在Core Data中有一个任务列表。我使用NSFetchedResultsController将它们提取到UITableView中。

我需要自定义订单中的自定义部分:

  1. OVERDUE
  2. ACTIVE
  3. ONGOING
  4. POSTPONED
  5. 已完成
  6. 为了确定任务应该进入哪个部分,我使用基于相对对象中的其他属性动态计算的派生瞬态属性。

    不幸的是,您无法将派生值作为获取请求使用的排序描述符传递。这是因为fetch依赖于已经要求获取的数据。鸡肉和鸡肉蛋

    我理解为什么我不能这样做,这无助于我解决问题!

    我试过了:

    • 将NSFetchedResultsController子类化为“customise creation of sections and index titles”。也许我这样做是错误的,但这只是改变了部分的名称和顺序,而不是那些部分的内容(这是至关重要的)。

    • 每个部分填充数组并将它们送到表中(笨重, 慢而完全有效。)

    • 扯掉正在进行的&推迟的任务(有效但不理想)。这样我可以通过dueDate排序并通过瞬态值驱动sectionNameKeyPath。

    有没有人有更好的想法?有很多问题就像这个问题一样,但没有一个问题可以解决。

    提前致谢!

    干杯

1 个答案:

答案 0 :(得分:10)

最简单的解决方案是添加持久的“section”属性(或转换现有的transient属性)。使其成为一组可排序的值(使用您想要的名称在运行时显示)。无论何时更新任何记录,都要重新计算并存储section属性。

我意识到这听起来像是在存储冗余信息,但除了使逻辑更简单之外,它还可以编制索引,从而加快访问速度。