2013-05-07 3 views
1

Я предполагаю, что вы взяли запись из coredata на основе id.Since я получаю внутри цикла 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

u может сделать это по-другому -> извлечь все данные в один FetchRequest, а затем сделать цикл в результате, это сделает его быстрее. доступ к данным один раз – Omarj

ответ

5

Создать массив со всеми идентификаторами, которые вы хотите получать:

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

и извлечь все объекты с одной выборки запроса, используя предикат:

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

(Если вы это необходимо для импорта данных, я также могу рекомендовать читать Implementing Find-or-Create Efficiently в «Руководстве по программированию основных данных».)

+0

Отличное решение просто хотел опубликовать тот же ответ здесь, так что наверняка это лучший. –

+0

Большое спасибо за ваш ответ – Karthick

Смежные вопросы