Обновление базовых данных, если существует, или создание нового управляемого объекта.Могу ли я сделать это быстрее? - PullRequest
3 голосов
/ 22 января 2011

У меня есть следующий код, и мне было интересно, есть ли способ сделать это быстрее.По сути, мое приложение загружает из сети часть JSON (около 4000 записей) и обновляет или создает мои управляемые объекты на основе данных.На данный момент это довольно медленно, и я понимаю почему, но я новичок в основных данных, поэтому мне было интересно, могу ли я что-нибудь сделать, чтобы сделать это быстрее?

 NSFetchRequest *request = [[NSFetchRequest alloc] init];
 NSEntityDescription *entity = [NSEntityDescription entityForName:@"Company" inManagedObjectContext:managedObjectContext];
 [request setEntity:entity];
 NSMutableArray *coreDataArray = [[managedObjectContext executeFetchRequest:request error:nil] mutableCopy];
 [request release];

 for (NSDictionary *dict in arr) {
  NSArray *filtered = [coreDataArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(code == %@)", [dict objectForKey:@"Code"]]];
  //NSLog(@"COREDATA ARRAY: %d FILTERED ARRAY: %d CODE: %@ COREDATA FIRST CODE: %@", [coreDataArray count], [filtered count], [dict objectForKey:@"Code"], [[coreDataArray objectAtIndex:0] code]);
  if ([filtered count] > 0) {
   Company *c = [filtered objectAtIndex:0];
   if ([dict objectForKey:@"Defunct"]) {
    NSLog(@"DELETED DEFUNCT COMPANY");
    [managedObjectContext deleteObject:c];
   } else {
    [c populateWithJSONDictionary:dict];
   }
  } else {
   Company *c = (Company *)[NSEntityDescription insertNewObjectForEntityForName:@"Company" inManagedObjectContext:managedObjectContext];
   [c populateWithJSONDictionary:dict];
  }

  float percent = (float)[arr indexOfObject:dict]/[arr count];
  [self performSelectorInBackground:@selector(updateProgressView:) withObject:[NSString stringWithFormat:@"%f",percent]];
 }

 [coreDataArray release];

Большое спасибо за любую помощьВы можете дать.

1 Ответ

2 голосов
/ 22 января 2011

Вам следует ознакомиться с Core Data Programming Guide: Performance * section

. В нем содержатся некоторые конкретные рекомендации по производительности импорта данных.

В случае, если Apple снова переместит документациюВот хороший поисковый запрос в Google site:developer.apple.com core data import performance

...