2013-05-10 114 views
0

我的核心数据模式中有三个实体,分别为AB,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,
  • 设置resultTypeNSDictionaryType
  • 设置propertiesToFetch@[@"createdAt"]

的优点是,按日期排序基于SQLite的水平上进行的,而不是加载的所有对象的管理对象上下文和发射故障得到createdAt属性,所以这应该是更快,更少的内存密集型。

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

+0

整洁,谢谢 - 我不知道propertiesToFetch。 – 2013-05-10 16:28:42

相关问题