Iphone 瞬态部分名称KeyPath&;NSSortDescriptor NSFetchedResultsController

Iphone 瞬态部分名称KeyPath&;NSSortDescriptor NSFetchedResultsController,iphone,objective-c,xcode,nsfetchedresultscontroller,Iphone,Objective C,Xcode,Nsfetchedresultscontroller,我在核心数据中有一个任务列表。我使用NSFetchedResultsController将它们获取到UITableView中 我需要自定义订单中的自定义部分: 逾期 活跃的 进行中 推迟 完成 为了确定任务应该进入哪个部分,我使用了一个派生的瞬态属性,该属性是根据相对对象中的其他属性动态计算的 不幸的是,您不能将派生值作为提取请求使用的排序描述符传递。这是因为提取依赖于已经有数据被要求提取。鸡肉和鸡蛋 我明白为什么我做不到,但这无助于我解决问题 我试过: 将NSFetchedResultsCo

我在核心数据中有一个任务列表。我使用NSFetchedResultsController将它们获取到UITableView中

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

  • 逾期
  • 活跃的
  • 进行中
  • 推迟
  • 完成
  • 为了确定任务应该进入哪个部分,我使用了一个派生的瞬态属性,该属性是根据相对对象中的其他属性动态计算的

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

    我明白为什么我做不到,但这无助于我解决问题

    我试过:

    • 将NSFetchedResultsController子类化为“”。也许我做错了,但这只是改变了部分的名称和顺序,而不是这些部分的内容数量(这很关键)

    • 为每个节填充数组并将其馈送到表中(笨重, 缓慢但完全有效)

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

    有谁有更好的主意吗?像这样的问题已经有很多了,但没有一个能很好地解决

    提前谢谢


    Cheers

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


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

    一个选项可能是-如果您已经从核心数据获取所有任务-也许您可以为每个任务保存额外的属性-如果任务“在运行中”更改部分-它也可以在核心数据中更新-因此-通过controllerWillChangeContent:delegate方法将动画重新定位到正确的部分?还是我遗漏了什么?嗨,丹尼斯,谢谢你的回复。由于更改日期会将项目移动到不同的部分,我想知道如何有效地检查/更改部分属性?此答案+Guntis Treulands对我的问题的评论非常有效:)