0

我的核心数据模式中有三个实体,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"];

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

4

1 回答 1

1

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

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

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

然后该allObjects数组将仅包含 3 个字典(每个实体一个)。

于 2013-05-10T15:55:54.797 回答