将属性添加到核心数据实体

时间:2013-02-08 19:17:59

标签: iphone ios xcode core-data core-data-migration

这已经讨论了很多,但我找到的任何东西都没有帮助我...我只是想为一个单身实体添加一个属性。没有丢失我的数据的原因。

To do that, I followed these steps

但我认为它根本不起作用。只要不尝试使用新属性,就没有错误。但是在我的核心数据模型中(当我在XCode中打开.xcdatamodel时)它就在那里,甚至在我的实体的NSManagedObject子类中,新属性作为属性存在。但是当我尝试使用它时,会发生这种情况:

unrecognized selector sent to instance 0x74f8520

the entity Name is not key value coding-compliant for the key "isFavoriteName".'

关键字“isFavoriteName”是我刚刚添加的。就像我说的那样,我做了所有的步骤。我错过了什么吗? 我认为,新的模型版本没有被使用,因为当我删除模型中的一些属性时,我的应用程序仍然有效并且仍然显示已删除的信息...我已将当前的核心数据模型版本设置为新的(第6步)。

我希望你能帮助我!

尼克

编辑:我是否可能需要在代码中更改某些内容?除了在创建persistentStoreCoordinator时设置选项...因为我有,我想说myApp.xdatamodel,其中,我知道有myApp.xdatamodel和myApp 2,xdatamodel ......但是我的代码我会这样做:

NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"myApp" withExtension:@"mom"];

_managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];

1 个答案:

答案 0 :(得分:3)

那是对的 - 你链接到的页面遗漏了一个适用于你案例的步骤。即使您创建了该模型的新版本,您的代码仍然按名称加载旧版本。

不要只需将其更改为加载版本2即可。这样做:

NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"myApp" withExtension:@"momd"];

这将查看momd文件夹并获取当前版本。在这种情况下,它将获得版本2.如果您将来再次更改模型,它将获得当前的任何版本。