我有我的核心数据数据库的第一版。(减少的例子)

我对模型做了一些修改,制作了V2。这涉及到创建一个新的实体,其中包含类型属性和其他几个。type属性是指向板块实体的链接。

我的应用程序的新版本已经发布,数据可以迁移,因为这是轻量级的。当时出于我自己的原因,我当时没有建立一种关系。
稍后,我决定对结构做一些更大的更改,创建新的实体FixtureType和PlateTypeImage。然后我建立了一些关系。这给了我模型的V3。

由于这种修改的性质,我需要完成从V2到V3的重量级迁移,这涉及到复制属性数据、填充新属性和在执行过程中设置关系。因此,我建立了一个映射模型,创建了必要的迁移策略并按下go按钮。
这适用于V2到V3,但是在测试从V1到V3的迁移时,我得到了一系列错误.,例如
reason=Cannot就地迁移存储:验证错误,缺少强制目标关系上的属性值
我使用以下PSC选项:
NSDictionary *options = @{
NSMigratePersistentStoresAutomaticallyOption : @YES,
NSInferMappingModelAutomaticallyOption : @YES
};
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) {所以,我的问题是核心数据是如何迁移数据的?它是顺序的,所以我得到了从V1到V2的轻量级迁移,然后是重量级的V2到V3,还是从V1到V3的迁移?如果是这样的话,我是否需要为V1到V3创建一个迁移策略(很快就会使事情变得难以处理以涵盖每一个组合)?
而且,一旦我开始使用重量级,我是否失去了轻量级迁移工具?
感谢您的建议和评论。
发布于 2014-11-19 18:51:33
核心数据版本控制不是时态的。它只知道来源和目的地。因此,一旦您引入一个新模型,您就需要从以前的所有模型到当前模型进行测试。
如果添加V4,则需要测试以下内容:
V1->V4
V2->V4
V3->V4
因此,如果您的V4需要大量迁移,那么您需要为做一个映射--每个可能的迁移。
我的一般性建议是不惜一切代价避免大量移民。它们不是针对iOS而设计的,并且经常引发问题。有些替代方案会表现得更好。
更好的方法
我使用的两种最常见的代替大量迁移的方法是
请记住,iCloud不允许大量迁移,因此如果要考虑使用iCloud,则必须跳过大量迁移。这也是一个非常强烈的迹象,表明苹果正在放慢步伐,放弃大规模迁移,并将其作为“最后手段”。
https://stackoverflow.com/questions/27023121
复制相似问题