这已经被讨论了很多,但我发现没有任何帮助...我只想向单个实体添加一个属性。当然不会丢失我的数据。
To do that, I followed these steps
但我认为它根本不起作用。只要不尝试使用新属性,就不会出现错误。但是在我的核心数据模型中(当我在 XCode 中打开 .xcdatamodel 时)它就在那里,甚至在我的实体的 NSManagedObject 子类中,新属性作为属性存在。但是当我尝试使用它时,会发生这种情况:
无法识别的选择器发送到实例 0x74f8520
或
实体名称与键“isFavoriteName”的键值编码不兼容。'
关键“isFavoriteName”是我刚刚添加的那个。就像我说的,我做了所有的步骤。我想念什么吗? 我认为,新的模型版本没有被使用,因为当我删除模型中的一些属性时,我的应用程序仍然有效并且删除的信息仍然显示......我已经将当前的核心数据模型版本设置为新版本(第 6 步)。
我希望你能帮助我!
尼克
编辑:我是否也需要更改代码中的某些内容?除了在创建 persistentStoreCoordinator 时设置选项之外...因为我有,比方说 myApp.xdatamodel,在里面,我知道有 myApp.xdatamodel 和 myApp 2,xdatamodel...但我的代码我仍然会做:
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"myApp" withExtension:@"mom"];
_managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
最佳答案
没错——您链接到的页面遗漏了适用于您的情况的一个步骤。即使您创建了模型的新版本,您的代码仍按名称加载旧模型。
不要只是将其更改为加载版本 2。改为这样做:
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"myApp" withExtension:@"momd"];
这将在 momd
文件夹中查找并获取当前版本。在这种情况下,它将获得版本 2。如果您将来再次更改模型,它将获得当前的任何版本。
关于iphone - 向核心数据实体添加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14779793/