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

Ios 不同实体核心数据属性的最大值,ios,cocoa,core-data,nsfetchrequest,Ios,Cocoa,Core Data,Nsfetchrequest,我的核心数据模型中有三个实体,A,B,C。每个都有一个createdAt日期 无论实体类型如何,访问最新的createdAt日期的最快方法是什么?我可以做一些类似于: (注意:fetchobjects…是运行执行请求的简单方法) 或者这被认为是有风险的(因为我依赖于不同实体中相同的属性名称)。第一步可以优化。不提取每个实体的所有对象,只提取最近的createAt值(每个实体): 将排序描述符添加到按createdAt降序排序的提取请求中 将fetchLimit设置为1 将resultType设

我的核心数据模型中有三个实体,
A
B
C
。每个都有一个
createdAt
日期

无论实体类型如何,访问最新的
createdAt
日期的最快方法是什么?我可以做一些类似于:

(注意:
fetchobjects
…是运行执行请求的简单方法)


或者这被认为是有风险的(因为我依赖于不同实体中相同的属性名称)。

第一步可以优化。不提取每个实体的所有对象,只提取最近的
createAt
值(每个实体):

  • 将排序描述符添加到按
    createdAt
    降序排序的提取请求中
  • fetchLimit
    设置为1
  • resultType
    设置为
    NSDictionaryType
  • 属性设置为
    @[@“createdAt”]
其优点是,按日期排序是在SQLite级别完成的,而不是将所有对象加载到托管对象上下文中并触发错误以获取
createdAt
属性,因此这应该更快、内存占用更少

allObjects
数组将只包含3个字典(每个实体一个)

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"];