2009-12-03 123 views
0

我想为Core Data实体编写一个简单的表视图编辑器。不幸的是我遇到了问题。实体xxx不是密钥值编码兼容密钥“(空)”

向表中添加第一个实体时发生错误。为造就模态对话框的过程如下:

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)”。

如果我填写造就对话框之前的“名称”字段中,我能够增加成功的第一个实体:

[newManagedObject的setValue:@“新组” forKey:@“名”]; //这个工程

我使用NSFetchedResultsController来管理表视图顺便说一句。

谢谢!

+0

[errorInfo]产生了什么? – TechZen 2009-12-03 23:56:05

+0

TechZen,这是在控制台上的输出: USERINFO { NSTargetObjectUserInfoKey = <组:0x46b5d00>(实体:组; ID:0x46db950 ; data:{ members =( ); name = dd; }); NSUnknownUserInfoKey = ; } 该实体只有两个属性,名称(字符串)和成员(一对多关系) – sehugg 2009-12-04 01:03:08

回答

0

Yarr ...对不起,这实际上是在我的didChangeObject:atIndexPath:forChangeType:newIndexPath:函数中匆忙从别处拷贝过来的。显然这里抛出的异常可能会在​​方法中被遮蔽。

+0

(也.. NSZombieEnabled很好..http://developer.apple.com/mac/library/technotes/tn2004/tn2124.html) – sehugg 2009-12-04 02:54:32

0

在您的第一个代码块中,第三行代码看起来超出了上下文。不知道是否有什么可以贡献的东西。其次,从实体名称中获取NSManagedObject到NSManagedObjectContext的最简单方法是使用[NSEntityDescription insertNewObjectForEntityName:inManagedObjectContext:]选择器。

所以,我会做一些事情,如:

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

你不会需要释放NEWOBJECT了,因为[NSEntityDescription insertNewObjectForEntityName:inManagedObjectContext:]选择将返回一个对象为0的保留数。另外,确保你有NameEditController指定它的managedObject属性保留。

要解决您的实际问题,这听起来像是您的数据模型中指定了'name'作为必需属性?在您的数据模型中显示“name”的详细信息的屏幕截图将有所帮助。

相关问题