【问题标题】:What to do when get "The model used to open the store is incompatible with the one used to create the store"?出现“开店模式与开店模式不兼容”怎么办?
【发布时间】:2011-12-26 01:45:27
【问题描述】:

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

【问题讨论】:

标签: core-data


【解决方案1】:

或者,如果您处于开发模式,您也可以删除应用并重新运行。

【讨论】:

    【解决方案2】:

    删除应用有时并非如此!建议,您的应用已经发布!您不能只是将新实体添加到数据库然后继续进行 - 您需要执行迁移!

    对于那些不想深入研究文档并正在寻找快速解决方案的人:

    打开您的 .xcdatamodeld 文件

    点击编辑器

    选择添加模型版本...

    添加模型的新版本(添加的新数据模型组)

    选择主文件,打开文件检查器(右侧面板)并在版本化核心数据模型下为当前数据模型选择新版本的数据模型

    这还不是全部)您应该执行所谓的“光迁移”。

    转到您的 AppDelegate 并找到创建 persistentStoreCoordinator 的位置

    找到这行if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&amp;error])

    将 nil 选项替换为 @{NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES} (actually provided in the commented code in that method)

    来吧,玩得开心! 附言这仅适用于轻量级迁移。为了使您的迁移符合轻量级迁移的条件,您的更改必须限制在这个窄范围内:

    添加或删除属性(属性或关系)。 将非可选属性设为可选。 只要您提供默认值,就可以将可选属性设为非可选。 添加或删除实体。 重命名属性。 重命名实体。

    答案借自Stas

    【讨论】:

    • 选择主文件,打开文件检查器(右侧面板)并在版本化核心数据模型下为当前数据模型选择新版本的数据模型。我无法理解这一步。所以我跳过了它,它仍然解决了我的问题。如果可能的话,你能解释一下这一步吗?
    • 这是正确答案。谢谢,我不得不更新一个旧项目,这是解决问题的正确程序
    【解决方案3】:

    如果这是非生产应用,只需删除本地数据库 (appname.sqlite) 并重新启动应用即可。

    我发现我一直在这样做,因此请提供以下其他详细信息:

    在 XCode 4 (4.3.2) 下,您应该在此处找到您的数据存储:

    /Users/~/Library/Application Support/iPhone Simulator/simulatorVersion/Applications/yourAppIdentifier/Documents

    或者您可以使用 Spotlight,如果您首先启用搜索系统文件;我发现将这样的搜索保存到菜单栏是最快的。

    【讨论】:

      【解决方案4】:

      如果这是非生产应用,只需删除本地数据库 (appname.sqlite) 并重新启动应用即可。

      【讨论】:

        【解决方案5】:

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

        在模拟器上,转到硬件 -> 主页:

        在您的应用程序图标上单击并按住鼠标按钮:

        点击应用图标中的“X”删除:

        返回 Xcode 并重新启动您的应用程序(Command+R):

        或:

        PS: 如果错误再次出现,请检查您的代码,因为问题应该出在语法或您要列出的内容与您拥有的数据模型之间的差异。

        【讨论】:

          【解决方案6】:

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

          如果在手机上运行,​​请确保删除应用并重新运行

          【讨论】:

            【解决方案7】:

            我在使用 Xcode 7 beta 1 时遇到了同样的问题,以下操作已解决该问题。 菜单==>>点击窗口>项目>选择左侧的项目,然后点击右侧的删除按钮。 如果还是不行, => 重置模拟器并运行应用程序

            【讨论】:

              猜你喜欢
              • 2012-01-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-04-19
              • 2017-03-13
              • 1970-01-01
              • 2011-01-04
              • 2017-03-09
              相关资源
              最近更新 更多