不同实体核心数据属性的最大值
Posted
技术标签:
【中文标题】不同实体核心数据属性的最大值【英文标题】:Max value from core data attribute of different entities 【发布时间】:2013-05-10 15:10:47 【问题描述】:我的核心数据模式中有三个实体,A
、B
、C
。每个都有一个createdAt
日期。
无论实体类型如何,访问最近的createdAt
日期的最快方法是什么?我可以这样做吗:
(注意:fetchobjects
... 只是运行执行请求的简写方法)
NSArray *allAs = [context fetchObjectsForEntityName:@"A"];
NSArray *allBs = [context fetchObjectsForEntityName:@"B"];
NSArray *allCs = [context fetchObjectsForEntityName:@"C"];
NSArray *allObjects = [[allAs arrayByAddingObjectsFromArray:allBs] arrayByAddingObjectsFromArray: allCs]
NSDate *latestDate = [allObjects valueForKeyPath:@"@max.createdAt"];
或者这被认为是有风险的(假设我依赖于不同实体中相同的属性名称)。
【问题讨论】:
【参考方案1】:第一步可以优化。而不是获取每个实体的所有对象,只获取最近的createAt
值(每个实体):
createdAt
降序排序的提取请求中,
将fetchLimit
设置为1,
将resultType
设置为NSDictionaryType
,
将propertiesToFetch
设置为@[@"createdAt"]
。
优点是按日期排序是在 SQLite 级别完成的,而不是将所有对象加载到托管对象上下文中并触发错误以获取 createdAt
属性,因此这应该更快且内存占用更少。
allObjects
数组将只包含 3 个字典(每个实体一个)。
【讨论】:
以上是关于不同实体核心数据属性的最大值的主要内容,如果未能解决你的问题,请参考以下文章