Объект xxx не соответствует кодированию ключевого значения для ключа “(null)”.
-
12-09-2019 - |
Вопрос
Я пытаюсь написать простой редактор табличного представления для объекта Core Data.К сожалению, я сталкиваюсь с проблемами.
Ошибка возникает при добавлении самого первого объекта в таблицу.Процесс вызова модального диалога заключается в следующем:
NSManagedObjectContext *context = [fetchedResultsController managedObjectContext];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Group" inManagedObjectContext:context];
insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context];
NSManagedObject *newManagedObject = [[NSManagedObject alloc] initWithEntity:entity insertIntoManagedObjectContext:context];
NameEditController *dialog = [[NameEditController alloc] init];
dialog.managedObject = newManagedObject;
[newManagedObject release];
UINavigationController *navCtrlr = [[UINavigationController alloc] initWithRootViewController:dialog];
navCtrlr.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[[self navigationController] presentModalViewController: navCtrlr animated:YES];
[navCtrlr release];
Внутри NameEditController
, У меня есть это после нажатия кнопки Готово:
NSString* name = self.nameLabel.text;
[self.managedObject setValue:name forKey:@"name"];
NSError *error = nil;
if (![managedObject.managedObjectContext save:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
}
UIViewController *ctrl = [self parentViewController];
[ctrl dismissModalViewControllerAnimated:YES];
Самый первый раз, когда я создаю объект (когда список пуст) Я получаю это:
Исключение было обнаружено во время обработки изменений основных данных:[Ключ valueforundefined:]:Группа сущностей не соответствует кодированию ключевого значения для ключа "(null)".
Если я заполню поле "имя" перед запуском диалогового окна, я смогу успешно добавить первый объект:
[Значение набора newManagedObject:@"Новая группа" forKey:@"имя"];// это работает
Я использую NSFetchedResultsController
чтобы управлять представлением таблицы, кстати.
Спасибо!
Решение 2
Ярр...извините, ребята, на самом деле это было в моем didChangeObject:atIndexPath:forChangeType:newIndexPath:
функция, наспех скопированная из другого места.По-видимому, исключение, выброшенное здесь, может быть скрыто внутри save:
способ.
Другие советы
В вашем первом блоке кода третья строка кода, по-видимому, вырвана из контекста.Не уверен, есть ли там что-то, что могло бы внести свой вклад.
Во-вторых, самый простой способ самостоятельно преобразовать NSManagedObject в NSManagedObjectContext из имени объекта - это использовать селектор [NSEntityDescription insertNewObjectForEntityName:inManagedObjectContext:].
Итак, я бы сделал что-то вроде:
NSManagedObjectContext *context = [fetchedResultsController managedObjectContext];
NSManagedObject *newObject = [NSEntityDescription insertNewObjectForEntityName:@"Group" inManagedObjectContext:context];
Вам больше не нужно будет выпускать newObject, поскольку селектор [NSEntityDescription insertNewObjectForEntityName:inManagedObjectContext:] вернет объект со значением сохранения 0.Кроме того, убедитесь, что у вас есть NameEditController, указывающий его свойство managedObject как сохраненное.
Чтобы решить вашу реальную проблему, похоже, что, возможно, у вас есть 'name', указанное в качестве обязательного свойства в вашей модели данных?Скриншот, показывающий подробную информацию о "имени" в вашей модели данных, мог бы помочь.