Сущность xxx не совместима со значением ключа для ключа "(null)" - PullRequest
0 голосов
/ 04 декабря 2009

Я пытаюсь написать простой редактор табличного представления для сущности 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];

В первый раз, когда я создаю объект (когда список пуст), я получаю это:

Исключение было обнаружено при обработке изменения базовых данных: [valueForUndefinedKey:]: группа объектов не соответствует значению ключа, соответствующему кодированию для ключа "(null)"

Если я заполняю поле 'name' до вызова диалогового окна, я могу успешно добавить первую сущность:

[newManagedObject setValue: @ "Новая группа" forKey: @ "name"]; // это работает

Я использую NSFetchedResultsController для управления представлением таблицы.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 04 декабря 2009

Ярр ... извините, ребята, это было на самом деле в моей функции didChangeObject:atIndexPath:forChangeType:newIndexPath:, поспешно скопированной из другого места. Видимо, исключение, которое выдается здесь, может быть скрыто внутри метода save:.

0 голосов
/ 04 декабря 2009

В вашем первом блоке кода третья строка кода выглядит вне контекста. Не уверен, что есть что-то, что может помочь.

Во-вторых, самый простой способ получить NSManagedObject в NSManagedObjectContext из имени объекта - это использовать селектор [NSEntityDescription insertNewObjectForEntityName: inManagedObjectContext:].

Итак, я бы сделал что-то вроде:

NSManagedObjectContext *context = [fetchedResultsController managedObjectContext];
NSManagedObject *newObject = [NSEntityDescription insertNewObjectForEntityName:@"Group" inManagedObjectContext:context];

Вам больше не нужно выпускать newObject, поскольку селектор [NSEntityDescription insertNewObjectForEntityName: inManagedObjectContext:] вернет объект с сохраняемым числом 0. Кроме того, убедитесь, что у вас есть NameEditController, указывающий его свойство managedObject как сохраненное.

Для решения вашей реальной проблемы может показаться, что в вашей модели данных в качестве обязательного свойства указано «имя»? Снимок экрана, показывающий детали для имени в вашей модели данных, поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...