0

这已经讨论了很多,但我发现没有任何帮助我......我只想向单个实体添加一个属性。当然不会丢失我的数据。

为此,我按照以下步骤操作

但我认为它根本不起作用。只要不尝试使用新属性就没有错误。但是在我的核心数据模型中(当我在 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];
4

1 回答 1

3

没错-您链接到的页面遗漏了适用于您的情况的一个步骤。即使您创建了模型的新版本,您的代码仍会按名称加载旧版本。

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

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

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

于 2013-02-08T21:28:36.487 回答