#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 и приведете к большому огорчению и потерянному времени.
Я не могу точно сказать, что вы пытаетесь сделать, не зная, как выглядит ваша модель данных, но вам очень редко приходится проходить через массивы объектов, подобных этому.