当我更改数据模型时,我的应用程序崩溃了。为了再次运行它我应该从模拟器中删除应用程序并运行它。除了这样做之外,我们可以运行应用程序,而无需在每次更改数据模型时删除。我想要使用以前的数据。提前致谢
答案 0 :(得分:4)
答案有点棘手,但这对我来说总是有用。这是为了干净安装新兼容的.sqlite文件,不是迁移!
启动模拟器,删除应用和数据(删除应用后弹出窗口)。
退出模拟器
在对数据模型进行任何编辑后打开X-Code
如果需要,请更新datamodel版本:
Editor > Add Model Version...
Versioned Core Data Model
下选择您刚创建的删除{*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文件!
干杯, 罗伯特
答案 1 :(得分:3)
基本上,您需要能够将现有数据迁移到新架构 - 请阅读Core Data Versioning and Data Migration。
答案 2 :(得分:1)
用于NSPersistentStore的文件一次只能对应一个数据模型版本。您需要将数据迁移到新版本,或者告诉应用程序每次启动时都删除持久性存储文件(仅用于开发目的)。
只是看到你想要保留旧数据。您可以尝试将数据序列化为NSDictionary,然后将其保存到plist / json / xml文件中。然后,当您的程序启动时,您可以删除旧的NSPersistantStore文件并创建一个新文件。将plist / json / xml文件中的数据导入新的空持久存储文件。
请记住,为了实现轻量级迁移,除了新版本之外,还需要保留以前版本的数据模型。核心数据需要知道过去和现在的两种模型才能执行迁移。
答案 3 :(得分:0)
我有同样的问题,我还没有解决它。我不在乎。当我的应用程序处于开发阶段时,我只是在每次更改模型时清除数据。
我认为使用轻量级迁移,您仍然需要为要迁移或迁移的每个版本的数据模型复制数据模型。它是轻量级的,但不足以在早期开发中频繁更改数据模型时使用。
我建议您在无法加载数据时捕获它抛出的异常,并让程序在这种情况下自动删除数据并在初始状态下重新创建它。它与忽略问题答案相同,但您不必每次都手动删除数据。您可能应该将该代码保留用于生产,作为备份,以防由于某种原因迁移不起作用,但也许您应该询问用户是否要删除数据。