【问题标题】:Using one xcdatamodelId in two app在两个应用程序中使用一个 xcdatamodelId
【发布时间】:2011-08-29 14:56:36
【问题描述】:

我创建了一个项目,其核心数据将与不可更改的数据库一起使用。而且我不想在这个项目中编写代码,它将以编程方式填充这个数据库。所以,我用核心数据创建了第二个项目,从第一个项目中添加现有的 xcdatamodel 而不复制(仅引用)。在那里我填充了我的数据库,用 mozilla 插件打开它并成功填充。然后我复制我的 *.sqlite 文件并在第一个项目中用旧文件手动替换它。它会导致错误:“用于打开商店的模型与用于创建商店的模型不兼容”。但我对这两个文件使用相同的 xcdatamodelid。我的错误在哪里?

对不起我的英语,我真的需要帮助。

附:当我在 FileMerge 中打开第一个项目和第二个项目的 sqlite 文件和第二个(带有填充库的注释代码)时 - 第二个已经是空的。感谢您提供任何建议或帮助。

【问题讨论】:

    标签: ios core-data core-data-migration


    【解决方案1】:

    Karoly S 很好地回答了这个问题。我有一个提示,我经常使用它可以防止这种不同步的情况。无需尝试共享一个模型文件的两个 Xcode 项目,只需创建一个具有两个目标的 Xcode 项目。每个目标都将使用相同的模型文件、从该模型派生的任何类定义,以及可能的其他代码。我的第二个目标是生成数据库的 Mac OS 命令行程序,而我的第一个目标仍然是读取该数据库的 iOS 应用程序。 Mac OS 目标将覆盖项目子目录中的数据库文件,确保它是最新的。如果我对模型进行任何更改,Xcode 会知道同时更新这两个目标。

    【讨论】:

      【解决方案2】:

      您是否以任何方式更改了模型定义?您看到的错误是因为模型与您创建它时的模型与您尝试引用它时的模型之间存在一些差异。你在模拟器上运行吗?尝试删除您的两个应用程序以清除与之相关的数据,因为它可能已过时。之后只需重建您的两个项目,因为这将更新您的核心数据数据库。

      编辑:为了澄清一点,您的核心数据模型不同步,这通常是由于您构建和运行应用程序以及正在创建数据库,然后重新定义您的对象模型,这可以在多种方式,很可能是由添加属性或实体引起的。因此,当您尝试加载数据库时,应用程序和核心数据正在寻找一些字段,但它们不存在,因为它们在创建数据库时不存在。我希望这会有所帮助。

      【讨论】:

      • 感谢您的完整回答。一步一步:我在我的主项目中创建空数据库。然后我在 InitializeDataBase 项目数据库中创建(只创建,没有任何数据)。之后,我复制这个*.sqlite 文件到带有 main.sqlite 的文件夹(数据库名称相同)并用新的替换旧的。所以,我没有更改 xcdatamodel 中的任何内容,但问题仍然存在。还有一个有趣的事实 - 当我比较两者时 * FilesMerge 实用程序中的 .sqlite 文件,第一个,来自主项目不是空的 - 它具有表的描述,与来自第二个项目的 sqlite 文件相反,它是空的。感谢您的关注。
      • 嗯...所以您确实替换了您的应用程序引用的实际创建的数据库?您是否有机会向我们提供您收到的确切错误消息?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-14
      • 2018-08-10
      • 2020-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多