ios - 以前的核心数据迁移失败

标签 ios core-data core-data-migration

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

错误记录如下:

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

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

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

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

此外,如果那是我决定做事的方式,我究竟应该如何正确地做这件事?我是否会查看我的包并删除任何 .momd 文件,然后重新创建一个具有不同名称的新文件?还是删除不必要的内容并仅提供新名称就可以得到预期的结果?

最佳答案

要完全重置,您可以在 applicationDidFinishLaunching 中添加一个检查:

  1. 检查用户默认设置中是否有表明您已迁移的标志
  2. 如果不迁移,则删除当前store文件
  3. 在用户默认设置中设置标志,这样您以后就不会再次“升级”
  4. 就是这样,打开商店并下载所需的数据

修复:

  1. 从您的第一个版本开始,逐步检查每个版本并运行它,直到找到问题
  2. 一旦发现问题,找出错误的迁移 - 导致崩溃的原因
  3. 修复迁移(很大程度上取决于迁移是什么,提出一个新问题...)

关于ios - 以前的核心数据迁移失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18449279/

相关文章:

ios - 在 Facebook iOS SDK 4.4 上共享视频

ios - 使用 Magical Record 导入的记录不会立即显示在 tableView 中

iphone - iOS - 处理数据模型更改的正确方法是什么?

macos - OS X 上的核心数据轻迁移

ios - 全新安装的核心数据迁移

ios - 我想设置音量,同时使用AVAssetWriter将音频样本缓冲区附加到新文件中

ios - 与 Android 相比,UIWebView 加载页面的时间太长?

ios - CTLine的 "optical bounds"是什么?

ios - NSFetchResultsController 的 NSPredicate

ios - 将视频保存到 Core Data