Objective C — обновление записи основных данных

#core-data #nsmanagedobject

#ядро-данные #nsmanagedobject

Вопрос:

я должен обновить некоторые записи в Core Data. Это правильный путь?

 NSManagedObjectContext *context = [self managedObjectContext];
NSMutableArray *poiFromCD=(NSMutableArray *)[self takePoiFromCoreData];

for (int i=0; i<[array count]; i  ) {
  for (int j=0; j<[poiFromCD count]; j  ) {
    Poi *poi=(Poi *)[poiFromCD objectAtIndex:j];
    if ([[[array objectAtIndex:j]objectForKey:@"poiID"]isEqualToString:poi.poiID]) {
      Poi *p=[poiFromCD objectAtIndex:j];
      p.poiID=[[array objectAtIndex:i]objectForKey:@"poiID"];
      p.lastmod=[[array objectAtIndex:i]objectForKey:@"lastmod"];
   } else {
      Poi *p;
      p=[NSEntityDescription insertNewObjectForEntityForName:@"Poi" inManagedObjectContext:context];
      p.poiID=[[array objectAtIndex:i]objectForKey:@"poiID"];
      p.lastmod=[[array objectAtIndex:i]objectForKey:@"lastmod"];
   }
 }
}

NSError *error;
if (![context save:amp;error]) {
NSLog(@"Errore durante il salvataggio: %@", [error localizedDescription]);
}
  

Я передаю массив своему методу, беру данные, которые уже есть в CoreData, и помещаю их в poiFromCD.

Пожалуйста, если я ошибся, укажите мне правильный путь! 🙂

Ответ №1:

Нет, это не стандартный способ обновления объектов Core Data. Вы явно пытаетесь обрабатывать Core Data как SQL, и это не сработает.

Core Data — это не SQL. Сущности — это не таблицы. Объекты — это не строки или записи. Атрибуты — это не столбцы. Core Data — это система управления графом объектов, которая может сохранять или не сохранять граф объектов и может использовать или не использовать SQL далеко за кулисами для этого. Попытка думать о Core Data в терминах SQL приведет к тому, что вы совершенно неправильно поймете Core Data и приведете к большому огорчению и потерянному времени.

Я не могу точно сказать, что вы пытаетесь сделать, не зная, как выглядит ваша модель данных, но вам очень редко приходится проходить через массивы объектов, подобных этому.