按关系属性排序NSFetchedResultsController? NSFetchRequest NSSortDescriptor

时间:2015-05-13 14:06:03

标签: ios sorting core-data nsfetchedresultscontroller nsfetchrequest

如下图所示,Company对象与一组FinancialMetric个对象有关系。我想根据特定NSFetchedResultsControllerCompany的最新FinancialMetrics 和{{1}的值,对valuedate个对象进行排序关系属性type中的“收入”)。如果不将financialMetrics对象加载到数组中然后对数组进行排序,是否可以这样做?我想保留Company中的所有内容,就像使用NSFetchedResultsControllername这样的常规属性进行排序一样。

公司实体详情......

DataModelImage1

FinancialMetric实体详情......

DataModelImage2

1 个答案:

答案 0 :(得分:2)

您无法按多对多关系的值进行排序。排序描述符不能同时过滤。

您的要求的另一个潜在问题是您必须进行额外的记帐,以确保,例如,同一公司不会重复相同的度量标准类型。

有几种方法。一种是您在公司实体中保留当前值,只要指标发生变化,您就可以自动更新。如果你只是有一些这样的情况,这是一个可行的策略。

另一种方法是在Metric实体中明确表达您感兴趣的类型。假设您有12个不同的度量标准 - 只需命名它们并将它们作为属性添加到Metric实体即可。然后,您可以通过一对一关系按特定指标进行排序,例如metric.revenue

最后,如果你真的想要保留抽象,你可以重构你提取的结果控制器并让它获取Metric实体而不是Company。您只需按type进行过滤,按value排序,然后使用metric.company.name而不是company.name填充表格视图单元格。