我有一个核心数据EntityDescription
,我在其中创建了数据。然后,我更改了EntityDescription
,添加了新版本,使用xcdatamodeld
文件的编辑器删除了旧文件。
现在,我的核心数据代码都会导致此错误"The model used to open the store is incompatible with the one used to create the store}"
。详情如下。我该怎么办?我更喜欢删除数据模型中的所有内容并重新启动新数据模型。
感谢您的任何建议!
reason=The model used to open the store is incompatible with the one used to create the store}, {
metadata = {
NSPersistenceFrameworkVersion = 320;
NSStoreModelVersionHashes = {
Promotion = <472663da d6da8cb6 ed22de03 eca7d7f4 9f692d88 a0f273b7 8db38989 0d34ba35>;
};
NSStoreModelVersionHashesVersion = 3;
NSStoreModelVersionIdentifiers = (
);
NSStoreType = SQLite;
NSStoreUUID = "9D6F4C7E-53E2-476A-9829-5024691CED03";
"_NSAutoVacuumLevel" = 2;
};
答案 0 :(得分:19)
或者,如果您处于开发模式,您也可以删除该应用并再次运行。
答案 1 :(得分:10)
删除应用有时并非如此!建议,您的应用已经发布!您不能只是将新实体添加到数据库并继续 - 您需要执行迁移!
对于那些不想深入了解文档并正在寻找快速解决方案的人:
打开您的.xcdatamodeld文件
点击编辑
选择添加模型版本...
添加新版本的模型(添加了新的数据模型组)
选择主文件,打开文件检查器(右侧面板),在Versioned核心数据模型下选择当前数据模型的新版数据模型
这不是全部)你应该执行所谓的“轻度迁移”。
转到AppDelegate并找到正在创建persistentStoreCoordinator的位置
找到这一行if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error])
将{nil选项替换为@{NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES} (actually provided in the commented code in that method)
你去吧,玩得开心! 附:这仅适用于轻量级迁移。为了使您的迁移符合轻量级迁移的要求,您的更改必须限制在这个狭窄的范围内:
添加或删除属性(属性或关系)。 使非可选属性可选。 只要提供默认值,就可以选择非可选属性。 添加或删除实体。 重命名一个属性。 重命名实体。
从Stas
借来的答案答案 2 :(得分:6)
如果这是非生产应用,只需删除您的本地数据库(appname.sqlite)并重新启动该应用。
我发现我总是这样做,因此提供以下额外细节:
在XCode 4(4.3.2)下,您应该在这里找到您的数据存储区:
/ Users /〜/ Library / Application Support / iPhone Simulator / simulatorVersion / Applications / yourAppIdentifier / Documents
如果您首先启用搜索系统文件,则可以使用Spotlight;我发现将这样的搜索保存到菜单栏最快。
答案 3 :(得分:5)
如果这是非生产应用,只需删除您的本地数据库(appname.sqlite)并重新启动该应用。
答案 4 :(得分:1)
在模拟器上删除您的应用并重新启动:
返回Xcode并重新启动应用程序(Command + R):
或:
PS .: 如果再次出现错误,请检查您的代码,因为问题应该是您希望使用您拥有的数据模型列出的语法或差异。
答案 5 :(得分:0)
我使用Xcode 7 beta 1遇到了同样的问题,以下操作解决了这个问题。 菜单==&GT;&GT;单击窗口&gt;项目&gt;选择左侧的项目,然后单击位于右侧的删除按钮。 如果仍然无法工作, =&GT;重置模拟器并运行应用程序
答案 6 :(得分:0)