16

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

我需要按自定义顺序自定义部分:

  1. 逾期
  2. 积极的
  3. 进行中
  4. 推迟
  5. 完全的

为了确定任务应该进入哪个部分,我使用基于相关对象中的其他属性动态计算的派生瞬态属性。

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

我明白为什么我不能这样做,这并不能帮助我解决问题!

我试过了:

  • 将 NSFetchedResultsController 子类化为“自定义创建部分和索引标题”。也许我做错了,但这只是改变了部分的名称和顺序,而不是这些部分中有多少东西(这很关键)。

  • 每个部分填充数组并将它们提供给表格(笨重,缓慢但完全有效)。

  • 删除正在进行的和推迟的任务(这可行,但并不理想)。这样我可以按dueDate 排序并通过瞬态值驱动sectionNameKeyPath。

有没有人有更好的想法?像这样的问题已经有很多了,但没有一个能找到一个简洁的解决方案。

提前致谢!

干杯

4

1 回答 1

11

最简单的解决方案是添加一个持久的“部分”属性(或转换现有的瞬态属性)。使其成为一组可排序的值(在运行时使用所需的名称显示)。每当您更新任何记录时,也要重新计算和存储部分属性。

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

于 2012-05-14T16:35:19.483 回答