我的核心数据模式中有三个实体,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"];
或者这被认为是有风险的(假设我依赖于不同实体中属性的名称相同)。
答案 0 :(得分:1)
可以优化第一步。不是获取每个实体的所有对象,而是仅获取最新的createAt
值(每个实体):
createdAt
,fetchLimit
设置为1,resultType
设置为NSDictionaryType
,propertiesToFetch
设置为@[@"createdAt"]
。优点是按日期排序是在SQLite级别完成的,而不是将所有对象加载到托管对象上下文中并触发错误以获取createdAt
属性,因此这应该更快,内存密集度更低
allObjects
数组将只包含3个词典(每个实体一个)。