Coredata 轻量级迁移失败

Posted

技术标签:

【中文标题】Coredata 轻量级迁移失败【英文标题】:Coredata Lightweight Migration Fails 【发布时间】:2018-02-18 12:42:14 【问题描述】:

如果我添加新模型版本,然后将属性添加到实体,我会遇到迁移失败。属性的类型是什么、它是可选的还是具有默认值都无关紧要。如果我只是添加新模型版本但不添加属性,它可以正常工作。在过去的 3 年里,我做了很多次这样的事情,没有任何问题。 NSMigratePersistentStoresAutomaticallyOption 和 NSInferMappingModelAutomaticallyOption 都设置为 true。我得到的错误如下所示。

2018-02-18 12:28:51.771608+0000 Writing Shed[4105:1886727] [error] 错误:非法尝试保存到从未打开的文件。 “此 NSPersistentStoreCoordinator 没有持久存储(架构不匹配或迁移失败)。它无法执行保存操作。”。上次记录的错误 = 错误域 = NSCocoaErrorDomain 代码 = 134140 “持久存储迁移失败,缺少映射模型。”

有谁知道可能出了什么问题?

【问题讨论】:

即使重命名/删除属性也失败了! 您是否正确地将新属性添加到最新版本,并在项目中同时包含以前的版本和新的版本? Xcode 的行为并不总是很直观,您需要在添加新版本时仔细检查。 谢谢。是的,我已经正确添加了属性(该模型有几十个实体并且在 v26 上)。版本都在项目文件中。就像我说的,我已经做过很多次了,并且知道其中的陷阱。 很明显你在某些时候做错了什么,这么简单的迁移应该没有问题,但遗憾的是 Xcode 很容易陷入相当多的陷阱。您可能想查看***.com/questions/20983542/… 和***.com/questions/2492103/… 来尝试一下。 【参考方案1】:

我发现了问题。我正在 Mac OS 上开发一个已经在 ios 上可用的应用程序。他们通过 iCloud 同步 CoreData。在 Mac 上工作的某个时候,我向模型添加了一些非可选或默认的属性。长话短说,这导致了在更改之前的 IOS 商店出现问题,因此迁移失败(无法迁移到非可选/非默认属性)。我仍然不确定我是如何陷入这种情况的,因为我通常对 CoreData 非常小心,但是会发生一些事情。感谢 cmets 让我看得更深。

【讨论】:

以上是关于Coredata 轻量级迁移失败的主要内容,如果未能解决你的问题,请参考以下文章

CoreData 版本控制和阻塞轻量级迁移

CoreData:不能轻量级迁移删除实体“没有这样的表”

如何在 Swift 中进行轻量级 CoreData 迁移

CoreData 轻量级迁移 + 自定义

Core Data轻量级迁移错误

集成 RestKit 和 MagicalRecord 时出现 CoreData 轻量级迁移错误