使用核心数据时出现问题

时间:2011-05-13 08:27:49

标签: cocoa core-data

在我的cocoa应用程序中使用核心数据框架,我创建了几个实体并使用NSEntityDescription创建了引用。当我运行应用程序时出现错误,说“用于打开持久存储的托管对象模型版本与用于创建持久存储的版本不兼容。”

3 个答案:

答案 0 :(得分:2)

您需要从设备/模拟器中删除该应用程序,然后再构建并运行。

每次更改模型时都会发生这种情况,因为旧数据存储将保留在apps文档文件夹中,而访问它的类已被更改。

在开发的后期阶段,您可能会想要引入商店迁移,您的测试人员和用户不必在每次发布新版本时都删除他们的数据。如果您的模型保持静态,则无需在将来的更新期间迁移数据。

您可能需要查看Core Data Migration Programming Guide以获取更多信息。

答案 1 :(得分:0)

您必须从以下任一位置删除持久性存储文件:

  • ~/Library/$AppName
  • ~/Library/Application Support/$AppName

(取决于您的Xcode版本。)

答案 2 :(得分:0)

答案有点棘手,但这对我来说总是有用。这是为了干净安装新兼容的.sqlite文件,不是迁移

启动模拟器,删除应用和数据(删除应用后弹出窗口)。

退出模拟器

在对数据模型进行任何编辑后打开X-Code

删除{*appname*}.sqlite文件(或备份它,将其从项目文件夹中删除,然后删除引用)

清理应用(Product > Clean

在模拟器中运行应用程序(对于本教程,我将假设4.2)

在模拟器运行时,在Finder窗口中,导航至: {*home*} > Library > Application Support > iPhone Simulator > 4.2 > Applications > {*random identifier*} > Documents > {*appname*}.sqlite

将此文件复制到其他位置

停止在X-Code中运行您的应用

将{ appname }。sqlite文件拖放到X-Code中的文件列表中。

在弹出的对话框中,确保选中copy to folder复选框。

Product > Clean

然后再次在模拟器中运行应用程序

现在你应该有一个工作的sqlite文件!

干杯, 罗伯特