Core data 如何在该实体的NSManagedObject中反映新的核心数据实体属性?
我试图在我的一个db类上实现一个getter。但当我执行以下代码行时,“obj”是一个NSManagedObject:Core data 如何在该实体的NSManagedObject中反映新的核心数据实体属性?,core-data,key-value-coding,Core Data,Key Value Coding,我试图在我的一个db类上实现一个getter。但当我执行以下代码行时,“obj”是一个NSManagedObject: return [obj valueForKey:@"activationData"]; 我得到以下NSUnknownKeyException: “[valueForUndefinedKey:]:实体蓝图与键“activationData”的键值编码不兼容。” 我最近刚刚使用Xcode向我的“Blueprint”实体添加了一个名为“activationData”的字符串属性。但
return [obj valueForKey:@"activationData"];
我得到以下NSUnknownKeyException:
“[valueForUndefinedKey:]:实体蓝图与键“activationData”的键值编码不兼容。”
我最近刚刚使用Xcode向我的“Blueprint”实体添加了一个名为“activationData”的字符串属性。但当我运行应用程序时,表示Blueprint实体的NSManagedObject不包含新的“activationData”属性,这显然是崩溃的原因
NSManagedObject看起来像这样,但我希望它显示新属性以及createDate、name和order属性:
<NSManagedObject: 0x5138c90> (entity: Blueprint; id: 0x513a2e0 <x-coredata://8C586BB8-B9E7-4FD7-84CB-5CE66FB221E6/Blueprint/p2> ; data: {
createDate = "2012-02-21 15:49:00 +0000";
name = "Feb 17 test";
order = 2;
})
(实体:蓝图;id:0x513a2e0;数据:{
createDate=“2012-02-21 15:49:00+0000”;
name=“2月17日测试”;
顺序=2;
})
仅供参考,user1226119的回答(如下)提醒我,我使用Organizer从我的设备中提取sqlite db,并使用sqlite Manager对其进行检查以验证。果然,Blueprint表中仍然没有新的activationData字段。这张桌子看起来和以前一样
我想我一定错过了向现有db实体添加新属性的必要步骤。您的应用程序中的模型没有更改。您必须删除旧应用程序并在设备上重新部署应用程序。解决方案是在返回NSManagedObjectModel的代码中更新pathForResource方法调用。在添加属性之前,我确实创建了一个新的xcdatamodel版本的db,但显然您应该使用以下代码引用它,该代码检索应用程序将使用的模型
- (NSManagedObjectModel *)managedObjectModel {
if (managedObjectModel != nil) {
return managedObjectModel;
}
NSString *path = [[NSBundle mainBundle] pathForResource:@"MyDB Version5" ofType:@"mom" inDirectory:@"ASSIST.momd"];
NSURL *momURL = [NSURL fileURLWithPath:path];
managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL];
return managedObjectModel;
}
我必须将新数据库版本的名称(“MyDB Version5”)作为pathForResource参数。以前是“MyDB版本5”。我已经试过了。我应该在我的问题中提到它。