Core data 如何在该实体的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”的字符串属性。但

我试图在我的一个db类上实现一个getter。但当我执行以下代码行时,“obj”是一个NSManagedObject:

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

我已经试过了。我应该在我的问题中提到它。