1

我有以下模型:

  Entities:  Entity <----------->> SubEntity
++++++++++++++++++++++++++++++++++++++++++++++++
Attributes:  >name                 >uuid
             >identifier           >date

问题 #1: 我有一个Entities. 我想按each 中的最新date对fetch 进行排序。我该怎么做?SubEntitiesEntity

问题#2: 此外,获取请求resultType = NSDictionaryResultType在返回的字典中有和,我想获取属性name和(所有latestDate最新date的)。那可能吗?SubEntitiesEntity

4

2 回答 2

2

我对你的建议是改变你的模型:

在更新时添加一个latestDate属性。属性,检查是否是该对象的最新版本并相应更新。EntitySubEntityentitySubEntity dateEntity

这将允许您通过一个简单的查询来完成您需要的事情,然后您将能够使用获取的结果控制器来跟踪您的数据更改。

如果您无法重组模型,请查看@Michal K 的答案,但预取所有您的EntitySubEntity对象(2 个请求),然后才使用他的算法。

于 2013-10-28T03:26:45.413 回答
2

问题 #1

我认为您不能使用NSSortDescriptor集合关系来做到这一点。您可以对其进行子查询,但它们仅过滤对象;他们不排序。

我会向您推荐以下方法:

首先选择SubEntity每个的最新日期(最大值)Entity

NSArray *entities = ... // fetch here all your entities

NSMutableArray *result = [NSMutableArray array];
for (Entity *entity in entities) {
  SubEntity *max = [[entity subEntities] valueForKeyPath:@"@max.date"];
  if (max) [result addObject:max];
}

然后简单地订购result数组:

id sort = [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:NO];
result = [[result sortedArrayUsingDescriptors:@[sort]] mutableCopy];

你最终会得到一个SubEntity按日期排序的对象集合。您可以直接EntitySubEntity.

问题 #2

据我所知,你不能那样做。您可以使用上述解决方案访问这些元素。

于 2013-10-26T05:42:20.000 回答