获取“用于打开商店的模型与用于创建商店的模型不兼容”时该怎么办?

时间:2011-11-10 10:50:08

标签: core-data

我有一个核心数据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;
    };

7 个答案:

答案 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)

在模拟器上删除您的应用并重新启动:

在模拟器上,转到硬件 - &gt;家: enter image description here

在应用程序图标上单击并按住鼠标按钮: enter image description here

点击&#34; X&#34;在应用程序图标中删除:
enter image description here

返回Xcode并重新启动应用程序(Command + R):
enter image description here
或:
enter image description here

PS .: 如果再次出现错误,请检查您的代码,因为问题应该是您希望使用您拥有的数据模型列出的语法或差异。

答案 5 :(得分:0)

我使用Xcode 7 beta 1遇到了同样的问题,以下操作解决了这个问题。 菜单==&GT;&GT;单击窗口&gt;项目&gt;选择左侧的项目,然后单击位于右侧的删除按钮。 如果仍然无法工作, =&GT;重置模拟器并运行应用程序

答案 6 :(得分:0)

重置您的模拟器并再次运行。如果你在模拟器中使用不同的设备运行,它会工作。如果您使用iphone 6s模拟器运行并且尝试运行6s plus,它仍然可以在不重置的情况下运行。

如果在手机上运行,​​请务必删除该应用并重新运行

Open simulator dropdown