每当我更改数据模型时,我的应用程序就会崩溃。为了再次运行它,我应该从模拟器中删除应用程序,然后再运行它。除此之外,是否有任何方法可以在更改数据模型时不删除应用程序而运行应用程序。我希望使用以前的数据。提前致谢。
每当我更改数据模型时,我的应用程序就会崩溃。为了再次运行它,我应该从模拟器中删除应用程序,然后再运行它。除此之外,是否有任何方法可以在更改数据模型时不删除应用程序而运行应用程序。我希望使用以前的数据。提前致谢。
编辑器 > 添加模型版本...
有版本的 Core Data 模型
下选择刚创建的模型{*appname*}.sqlite
文件(或备份它、从项目文件夹中删除它并删除引用)。产品 > 清理
)。{*home*} > 应用程序支持 > iPhone 模拟器 > 4.2 > 应用程序 > {*随机标识符*} > 文档 > {*appname*}.sqlite
复制 这个文件到另一个位置。复制到文件夹
复选框。
产品 > 清理
基本上你需要能够将现有数据迁移到新的架构——详细了解Core Data版本控制和数据迁移。
NSPersistentStore所使用的文件一次只能对应一个数据模型版本。您需要将数据迁移到新版本或告诉应用程序每次启动时删除持久存储文件(仅限开发目的)。
刚看到您想保留旧数据。您可以尝试将数据序列化为NSDictionary,然后保存到plist / json / xml文件中。然后,当程序启动时,您可以删除旧的NSPersistantStore文件并创建一个新的文件。将数据从plist / json / xml文件导入到新的空持久存储文件中。
请记住,为了使轻量级迁移起作用,您需要保留数据模型的先前版本以及新版本。Core Data需要知道过去和现在的两个模型才能执行迁移。
我有同样的问题,但我还没有解决它。目前我并不关心这个问题。在我的应用程序开发过程中,每次更改模型时,我只需清除数据即可。
我认为,要使用轻量级迁移,您仍然需要为要从或要迁移到的每个数据模型版本制作副本。虽然它是轻量级的,但当您在早期开发阶段频繁更改数据模型时,它并不够轻量级。
我建议您捕获它无法加载数据时抛出的异常,并让您的程序在这种情况下自动删除数据并重新创建初始状态。这与忽略问题的答案相同,但您不必每次手动删除数据。您可能应该在生产中保留该代码,以备迁移由于某些原因无法工作时作为备份,但也许您应该询问用户是否要删除数据。