2013-08-26 55 views
0

我有一个应用程序,有许多核心数据迁移,有几个开发人员在项目上工作,有一次看起来没有正确迁移核心数据模型。最终的结果是,从应用程序的特定版本升级到当前版本的应用程序的用户无法将其上下文保存到商店(此应用程序进入后台时发生此保存)。以前的核心数据迁移失败

错误记录如下:

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

幸运的是,用户可能不会注意到从这个碰撞和错误太多,作为应用程序的退出过程中出现并应用程序被设计成简单地检索任何来自网络的数据在本地丢失,因此失败的保存并不像关闭任何用户创建的数据那样严重。当然,这并不理想,因为必须重新下载刚刚未在应用程序退出时保存到商店的数据。

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

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

另外,如果这是我决定做的事情,我会如何正确地做到这一点?我只是看看我的包,删除任何.momd文件,然后用不同的名称重新创建一个新的文件?或者是删除不必要的,只是给新的名字会给予期望的结果?

+0

为什么不只是修复错误的迁移? – Wain

+0

这是一个有效的问题。也许这可能需要一个单独的问题。但是,我很难确定错误迁移的来源。你能给我一些关于检测的建议吗?并且修复这种不良迁移比我提出的解决方案更容易吗?我将如何去解决一个坏的迁移? – hatunike

+0

您正在使用版本控制?所以你可以从你的第一个版本开始逐步检查每个版本并运行它直到你发现问题。 – Wain

回答

2

后再重新设置,你可以在你的applicationDidFinishLaunching添加一个检查其中:

  1. 检查在用户默认一个标志,指示已迁移
  2. 如果不迁移,删除当前存储文件
  3. 设定标志用户默认这样你就不会在将来
  4. 这就是它“升级”再次,开商店并下载所需的数据

要解决:

  1. 开始你的第一个版本,并逐步签每个版本并运行它,直到你找到问题
  2. 一旦发现问题,找出其中的迁移是坏的 - 是什么导致崩溃
  3. 修复迁移(很大程度上取决于迁移是什么,询问一个新问题...)
+0

我实施了您建议的“完全重置”解决方案,它似乎完全解决了我的问题。显而易见的缺点是每个人的商店文件都将被重置(即使是正常工作的文件)。做未来的移民工作时,我会更加谨慎。 – hatunike