Core data 如何将2个属性从我的应用商店版本交换到我的当前开发版本?

Core data 如何将2个属性从我的应用商店版本交换到我的当前开发版本?,core-data,core-data-migration,Core Data,Core Data Migration,如何将2个属性从我的应用商店版本交换到我的当前开发版本? 问题是我没有更改数据模型,因此没有数据模型迁移。 我尝试添加一个新的数据模型版本(与上一个版本没有任何更改),创建一个映射模型和一个自定义实体迁移策略,在createDestinationInstancesForSourceInstance中执行此属性交换。 它不起作用,因为从未调用迁移。在一些测试之后,仅当第二个数据模型不同但不相等时才调用我relised,这就是我想要的。 你有什么想法或建议吗? 我唯一的想法就是创建一个虚拟属性或类似

如何将2个属性从我的应用商店版本交换到我的当前开发版本? 问题是我没有更改数据模型,因此没有数据模型迁移。 我尝试添加一个新的数据模型版本(与上一个版本没有任何更改),创建一个映射模型和一个自定义实体迁移策略,在createDestinationInstancesForSourceInstance中执行此属性交换。 它不起作用,因为从未调用迁移。在一些测试之后,仅当第二个数据模型不同但不相等时才调用我relised,这就是我想要的。 你有什么想法或建议吗? 我唯一的想法就是创建一个虚拟属性或类似的东西来创建一个不同的数据模型,强制启动迁移过程。 谢谢。
Ricardo.

如果不更改数据模型,则迁移功能不是您想要的。这就像用大炮射击麻雀

只需保留一个用户首选项标志,以检查属性是否已更新。或者,您可以使用fetch进行检查

然后,只需“手动”更新属性,可能在
applicationFinishedLaunching

if (needsUpdate) {
   // fetch the concerned entities
   // iterate through fetchedObjects and change the concerned attributes
}
[self.managedObjectContext save:&error]; 

为了安全起见,您可以在单独的线程上使用
NSManagedObjectContext
s
performBlock:

将新数据模型版本标记为活动版本吗?是。我认为核心数据知道我并没有真正改变我的数据模型,然后它跳过了迁移。不确定,谢谢你,蒙迪。这正是我对移民的看法。我看到您的解决方案存在的问题是,您可以多次应用该更新,发布的更新数量不限。换句话说,必须有某种版本控制。也许是针对CbundLeversion进行测试,但据我所知,不可能获得用户即将更新的捆绑包版本。也许添加虚拟属性是最实用的方法,因为模型映射是串行应用的,一个接一个地应用于特定版本。你怎么看?如上所述,这太过分了。如有必要,保留版本用户首选项。如果您坚持使用迁移基础设施,只需重命名一个属性,迁移就会触发。确保全局替换代码中的属性名称。