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

时间:2013-05-10 15:10:47

标签: ios cocoa core-data nsfetchrequest

我的核心数据模式中有三个实体,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 个答案:

答案 0 :(得分:1)

可以优化第一步。不是获取每个实体的所有对象,而是仅获取最新的createAt值(每个实体):

  • 将排序描述符添加到按createdAt
  • 降序排序的获取请求中
  • fetchLimit设置为1,
  • resultType设置为NSDictionaryType
  • propertiesToFetch设置为@[@"createdAt"]

优点是按日期排序是在SQLite级别完成的,而不是将所有对象加载到托管对象上下文中并触发错误以获取createdAt属性,因此这应该更快,内存密集度更低

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