不同实体核心数据属性的最大值

Posted

技术标签:

【中文标题】不同实体核心数据属性的最大值【英文标题】:Max value from core data attribute of different entities 【发布时间】:2013-05-10 15:10:47 【问题描述】:

我的核心数据模式中有三个实体,ABC。每个都有一个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 个字典(每个实体一个)。

【讨论】:

以上是关于不同实体核心数据属性的最大值的主要内容,如果未能解决你的问题,请参考以下文章

核心数据 NSManagedObject:最大属性数?

如何将同一个xib文件绑定到不同的核心数据实体

从核心数据关系中获得最大价值

抽象实体的核心数据通用属性类型

核心数据最大存储 iPhone

使用 nspredicate 获取具有最大属性值的实体以及一个关系