Объект xxx не соответствует кодированию ключевого значения для ключа “(null)”.

StackOverflow https://stackoverflow.com/questions/1843330

Вопрос

Я пытаюсь написать простой редактор табличного представления для объекта 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', указанное в качестве обязательного свойства в вашей модели данных?Скриншот, показывающий подробную информацию о "имени" в вашей модели данных, мог бы помочь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top