Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 使用核心数据时遇到的问题_Cocoa_Core Data - Fatal编程技术网

Cocoa 使用核心数据时遇到的问题

Cocoa 使用核心数据时遇到的问题,cocoa,core-data,Cocoa,Core Data,我在cocoa应用程序中使用核心数据框架,我创建了两个实体,并使用NSEntityDescription创建了引用。当我运行应用程序时,我收到一个错误,提示“用于打开持久存储的托管对象模型版本与用于创建持久存储的版本不兼容。”您需要从设备/模拟器中删除应用程序,然后重新构建并运行 每次更改模型时都会发生这种情况,因为旧的数据存储将保留在apps documents文件夹中,而访问它的类已被更改 在开发的后期阶段,您可能希望引入存储迁移,这样您的测试人员和用户就不必在每次发布新版本时删除他们的数据

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

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

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

在开发的后期阶段,您可能希望引入存储迁移,这样您的测试人员和用户就不必在每次发布新版本时删除他们的数据。但是,如果模型保持静态,则不需要在将来的更新期间迁移数据


您可能需要查看以了解更多信息。

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

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

(取决于您的Xcode版本。)

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

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

退出模拟器

对数据模型进行任何编辑后,打开X代码

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

清理应用程序(
Product>clean

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

模拟器运行时,在Finder窗口中导航至:
{*home*}>库>应用程序支持>iPhone模拟器>4.2>应用程序>{*random identifier*}>文档>{*appname*}.sqlite

将此文件复制到其他位置

停止在X代码中运行应用程序

将{appname}.sqlite文件拖放到X代码中的文件列表中

在弹出的对话框中,确保选中了
复制到文件夹
复选框

产品>清洁

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

现在您应该有一个工作的sqlite文件了

干杯, 罗伯特