我有以下型号:
Entities: Entity <----------->> SubEntity
++++++++++++++++++++++++++++++++++++++++++++++++
Attributes: >name >uuid
>identifier >date
问题#1:
我有Entities
的抓取请求。我想按每个date
中所有SubEntities
的最新Entity
对提取进行排序。我该怎么做?
问题#2:
此外,获取请求有resultType = NSDictionaryResultType
,在返回的字典中,我想获取属性name
和latestDate
(所有date
的最新SubEntities
那个Entity
)。这可能吗?
答案 0 :(得分: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
个对象集合。
您可以直接从Entity
访问SubEntity
。
问题#2
据我所知,你不能这样做。您可以使用上面的解决方案访问这些元素。
答案 1 :(得分:2)
我建议您更改模型:
将latestDate
属性添加到Entity
更新SubEntity
。entity
媒体资源时,请检查SubEntity
date
是否为此Entity
对象的最新版本,并进行相应更新。
这将允许您通过简单的查询完成所需的操作,然后您就可以使用提取的结果控制器来跟踪您的数据更改。
如果您无法重构模型,请查看@Michal K的答案,但预取所有Entity
和SubEntity
对象(2个请求),然后才使用他的算法。