我对我的核心数据模型做了很多更改。过去我们使用简单的自动迁移。但是,这一次将失败。由于我真的不关心正在迁移的数据,我只想在自动迁移失败时删除持久存储并重新设置它。这是一个有效的方法吗?有什么我要小心的吗?这会让我的应用程序被拒绝吗?
1 回答
这样做有一些明确的问题,你需要小心。 这个答案从 NSManagedObjectContext 的文档中得到了一些很好的建议
上下文总是有一个“父”持久存储协调器,它提供模型并将请求分派到包含数据的各种持久存储。没有协调器,上下文就不能完全发挥作用。上下文的协调器提供托管对象模型并处理持久性。从外部存储中获取的所有对象都与全局标识符(NSManagedObjectID 的一个实例)一起在上下文中注册,该标识符用于将每个对象唯一标识到外部存储中。
当在我们的一个应用程序中遇到类似情况时,我选择创建一个新的持久性存储,并弃用旧的,因为我们的旧存储在我们的许多设备上被之前的错误迁移搞砸了。它最终比我希望的更混乱,但它确实奏效了。
您的计划存在的问题并非无法克服,我只是建议您谨慎行事。我喜欢 Giao 关于使用 NSManagedObjectContext 重置的建议。删除和重建时,持久存储协调器可能会感到困惑。我担心,因为苹果似乎在幕后做了很多事情。我也担心,因为似乎核心数据在已发布应用程序上的行为与在我们的调试版本上的行为不同,尤其是在升级过程中。
我认为您很聪明地认识到您的自动迁移会遇到麻烦,并且您正在寻找另一条路径。在最近的过去,我看到一个小组真的不得不争先恐后地一个月来处理他们应用程序中失败的数据迁移。