如何获取通过关系检索的NSManagedObject的ObjectID?

时间:2011-04-23 09:02:02

标签: performance core-data predicate nsmanagedobject

我有一个关键字查询的结果集。返回的每个关键字对象与另一个实体具有多对多关系。 (称之为B)

我想知道有没有办法使用关键字resultset并只找到B实体的托管objectID而不必将它们拉入内存?目前,我一直这样做:

NSMutableArray *objIdList = [[NSMutableArray alloc] init];
NSArray *keywordResultSet = <results from initial keyword query>;
for ( Keyword *keyword in keywordResultSet )
{
    B *mo = [keyword valueForKey: <relationship>];
    [objIdlist addObject: [mo objectID]];
}
// additional sorting of result set

问题是,当我这样做时,它是超慢的。有没有办法只获取ObjectID?

1 个答案:

答案 0 :(得分:0)

首先要问的是你是否需要objectIDs。很多Core Data新手认为objectID就像关系数据库中的键。他们不是。当您需要引用另一个持久性存储中的对象时,您只需要objectID。否则,他们对你没有多大帮助。我认为,鉴于您对Core Data的相对缺乏经验,您实际上首先需要获取objectID。

对于除objectID之外的任何其他属性,您可以通过属性执行提取并将结果类型设置为字典,从而生成轻量级提取,该提取仅返回包含所寻求的一个属性的值的字典数组。您无法使用objectID执行此操作,因为objectID不是严格来说是托管对象的属性,而是在特定持久性存储中引用它们。