2009-12-03 3 views
0

Я пытаюсь написать простой редактор табличного представления для объекта Core Data. К сожалению, у меня проблемы.Объект xxx не является ключом, совместимым с кодом для ключа «(null)»

Ошибка возникает при добавлении самой первой сущности в таблицу. Процесс воспитания модальный диалог выглядит следующим образом:

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, я это после того, как Done кнопка нажата:

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]; 

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

Исключение было обнаружено во время обработки изменений Core Data: [valueForUndefinedKey:]: группа объектов не является ключевым значением, совместимым с кодировкой для ключа «(null)».

Если я заполнить поле «имя» до вызова диалога, я могу добавить первый объект успешно:

[newManagedObject SetValue: @ «Новая группа» forKey: @ «имя»]; // это работает

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

Спасибо!

+0

Что делает [error userInfo]? – TechZen

+0

TechZen, это выход на консоли: UserInfo { NSTargetObjectUserInfoKey = <Группа: 0x46b5d00> (сущность: группы; ID: 0x46db950 <х-CoreData: /// Группа/t2AB024C0-88DA-4071-95A2-37E3E02494AF2 >; данные: { членов = ( ); name = dd; }); NSUnknownUserInfoKey = ; } Сущность имеет только два атрибута, имя (строка) и элементы (отношение «один ко многим») – sehugg

ответ

0

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

+0

(также .. NSZombieEnabled - это хорошо ..http://developer.apple.com/mac/library/technotes/tn2004/tn2124.html) – sehugg

0

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

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

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

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

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

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