我创建了一个包含核心数据的项目,该数据将与不可更改的数据库一起使用。而且我不想在这个项目中编写代码,它将以编程方式填充此数据库。因此,我使用核心数据创建第二个项目,从第一个项目添加现有的xcdatamodel而不复制(仅引用)。在那里我填充我的数据库,用mozilla插件打开它并成功填充。然后我复制,我的* .sqlite文件,并在第一个项目中手动将其替换为旧文件。它会导致错误:“用于打开商店的模型与用于创建商店的模型不兼容”。但我用两个文件相同的xcdatamodelid。我的错误在哪里?
对不起我的英语,我真的需要帮助。
P.S。当我从第一个项目打开sqlite文件时,在FileMerge中打开第二个(使用populate base的注释代码) - 第二个已经为空。我感谢任何建议或帮助。
答案 0 :(得分:1)
您是否以任何方式更改了模型定义?您看到的错误是因为模型与创建模型之间存在一些差异,并且从您尝试引用它时再次出现。你在模拟器上运行吗?尝试删除两个应用以清除与其相关的数据,因为它可能已过期。之后只需重新构建两个项目,因为这将更新您的核心数据库。
编辑:为了澄清一点,你的核心数据模型不同步,这通常是由你构建和运行一个应用程序,一个正在创建的数据库,然后重新定义你的对象模型引起的,这可以在一个多种方式,很可能是由添加属性或实体引起的。因此,当您尝试加载数据库时,有应用程序和核心数据正在查找的字段,但不存在,因为在创建数据库时它们不存在。我希望这会有所帮助。
答案 1 :(得分:1)
Karoly S很好地回答了这个问题。我有一个经常使用的提示可能会阻止这种不同步的情况。尝试共享一个模型文件而不是两个Xcode项目,只需创建一个包含两个目标的Xcode项目。每个目标将使用相同的模型文件,从该模型派生的任何类定义,以及可能的其他代码。我的第二个目标是生成数据库的Mac OS命令行程序,而我的第一个目标仍然是读取该数据库的iOS应用程序。 Mac OS目标将覆盖项目子目录中的数据库文件,确保它是最新的。如果我对模型进行任何更改,Xcode会知道更新两个目标。