以前的核心数据迁移失败

Posted

技术标签:

【中文标题】以前的核心数据迁移失败【英文标题】:Previous Core Data Migration Failure 【发布时间】:2013-08-26 17:06:19 【问题描述】:

我有一个应用程序进行了多次核心数据迁移,有几个开发人员在该项目上工作,有一次似乎无法正确迁移核心数据模型。最终结果是,从应用程序的特定版本升级到应用程序的当前版本的人无法将他们的上下文保存到商店(当应用程序进入后台时会发生这种保存)。

记录的错误如下:

This NSPersistentStoreCoordinator has no persistent stores. It cannot perform a save operation.

幸运的是,用户不太可能从这个崩溃和错误中注意到太多,因为它发生在应用退出期间,并且应用旨在简单地从网络中检索本地丢失的任何数据,因此不会出现保存失败的情况就像丢失任何用户创建的数据一样重要。当然,这不太理想,必须在应用退出时重新下载未保存到商店的数据。

我的问题最终是如何解决这个问题?

我的想法是发布一个小更新,彻底重置核心数据持久化模型。清除所有旧的数据存储,重新开始(记住所有数据都来自服务器)。用户不会丢失数据,这将解决未来的问题。有更好的主意吗?

另外,如果这就是我决定做事的方式,我将如何正确地做这件事?我是否只需查看我的捆绑包并删除任何 .momd 文件,然后重新创建一个具有不同名称的新文件?还是删除不必要的,只是提供新名称会产生所需的结果?

【问题讨论】:

为什么不直接修复错误的迁移? 这是一个有效的问题。也许这可能需要一个单独的问题。但是,我很难确定不良迁移来自哪个版本。你能给我一些关于检测这个的建议吗?修复这种糟糕的迁移会比我提出的解决方案更容易吗?我将如何解决错误的迁移? 您正在使用版本控制?因此,您可以从第一个版本开始,逐步检查每个版本并运行它,直到找到问题为止。 一旦发现问题,我将如何解决它?对不起,我的菜鸟问题,除了香草轻量级迁移之外,我对其他任何东西都没有经验。 大约需要下载多少数据才能开始清理? 10KB? 100KB? 1MB? 【参考方案1】:

要完全重置,您可以在applicationDidFinishLaunching 中添加支票:

    检查用户默认值中是否存在表明您已迁移的标志 如果未迁移,请删除当前存储文件 在用户默认值中设置标志,这样您以后就不会再次“升级” 就是这样,打开商店下载所需数据

修复:

    从您的第一个版本开始,逐步检查每个版本并运行它,直到找到问题为止 找到问题后,找出哪个迁移不好 - 导致崩溃的原因 修复迁移(很大程度上取决于迁移是什么,提出一个新问题...)

【讨论】:

我实施了您建议的“完全重置”解决方案,它似乎完全解决了我的问题。明显的缺点是每个人的存储文件都将被重置(甚至是工作文件)。在进行未来的迁移时,我会更加谨慎。

以上是关于以前的核心数据迁移失败的主要内容,如果未能解决你的问题,请参考以下文章

NSPersistenceFrameworkVersions 251 和 358 之间的核心数据迁移失败

核心数据自动轻量级迁移在 ios5 上失败

跳过核心数据迁移

使用 Magical Record 迁移核心数据失败并显示“已删除不兼容的模型版本”

作为 UIBackgroundTask 运行时,后台线程上的核心数据迁移失败

我应该如何迁移我的核心数据?