2013-05-07 39 views
1

我想从基于id的coredata中获取记录。因为我在每次迭代中获取for循环的执行时间非常大。有人能告诉我如何有效地做到这一点。Coredata在for循环中获取

for (int i = 0; i < [tempCodeDescArray count]; i++) { 
     NSDictionary *codeDescDict = [tempCodeDescArray objectAtIndex:i]; 
     NSPredicate *predicate=[NSPredicate predicateWithFormat:@"itemId=%@",[codeDescDict valueForKey:@"itemId"]]; 
     [fetchRequest setPredicate:predicate]; 
     NSError *error=nil; 
     NSArray *result=[context executeFetchRequest:fetchRequest error:&error]; 
    } 
+0

你可以用另一种方式来完成 - >在一个FetchRequest中获取所有数据,然后在结果上做一个循环,这使得它更快。访问数据一次 – Omarj 2013-05-07 09:45:55

回答

5

创建要获取所有ID的数组:

NSArray *idsToFetch = [tempCodeDescArray valueForKey:@"itemId"]; 

,并用一个单一的读取请求获取所有对象,使用谓语:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"itemId IN %@", idsToFetch]; 

(如果您需要这个来导入数据,我也可以推荐在“核心数据编程指南”中阅读 Implementing Find-or-Create Efficiently。)

+0

伟大的解决方案只是想在这里发布相同的答案,所以,肯定这是最好的。 – 2013-05-07 09:49:15

+0

非常感谢您的回答 – Karthick 2013-05-07 10:50:10