я 90 CoreData сущности под названием «ItemModel» с 2-мя атрибутов «UID», «описание», где каждый из элемента вставляется как NSManagedObject:CoreData, обновляющая NSManagedObject более одного раза, сохраняет несколько копий?
NSManagedObject *object = [NSEntityDescription insertNewObjectForEntityForName: @"ItemModel" inManagedObjectContext: AFYDelegate.managedObjectContext];
Первый вызов сервер присваивает «UID» для каждый из 90 предметов, выбранных выше для ключевого «uid». Контекст здесь не сохраняется.
На более поздний втором вызове сервера, я хотел бы обновить «описание» для 90 элементов, для каждый из NSManagedObject с помощью indexPath - путем выборки и передачи каждого объекта следующего способа и сохранения контекста:
[self updateItemToDataModel:object withData: description];
....
....
- (void)updateItemToDataModel:(NSManagedObject *) object withData:(NSString *)data
{
[object setValue:data forKey:@"description"];
NSError * error = nil;
if (![self.managedObjectContext save:&error]) {
//Handle any error with the saving of the context
NSLog(@"%@",error.localizedDescription);
}
}
Вышеупомянутое прекрасно работает при обновлении CoreData, но после закрытия симулятора и повторного запуска кода для каждого элемента будут два дубликата с теми же «uid» и «description». Это означает, что сейчас у меня есть 180 предметов. Повторное закрытие и запуск кода создает все больше и больше элементов.
Я попытался удалить метод updateItemToDataModel, сбросив симулятор, и он отлично работает с 90 элементами.
Я новичок в CoreData, если кто-то может помочь. Что случилось с моим кодом, если я только хотел обновить существующие элементы?
Как вы извлекаете свой «объект»? У вас есть этот код? – Jamie
Извлечение объекта по indexPath в UICollectionView и NSFetchedResultsController - NSIndexPath * indexPath = [[self.collectionView indexPathsForSelectedItems] lastObject]; NSManagedObject * object = [[self fetchedResultsController] objectAtIndexPath: indexPath]; – chongsj