2013-01-23 25 views
0

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

+0

您是否将新数据模型版本标记为活动版本? – Mundi

+0

是的。我认为核心数据知道我没有真正改变我的数据模型,然后它跳过了迁移。不确定。 – Ricardo

回答

0

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

只要保留用户首选项标志来检查属性是否已更新。或者,您可以使用提取进行检查。

然后只需更新属性“手动”,也许在applicationFinishedLaunching

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

为了安全起见,你可以使用NSManagedObjectContext小号performBlock:一个单独的线程做到这一点。

+0

感谢蒙迪。这正是我对迁移的看法。 我在解决方案中看到的问题是,您可以多次应用该更新,就像您发布的更新一样多。换句话说,必须有某种版本控制。也许是对CFBundleVersion进行测试,但据我所知,不可能获取即将被用户更新的软件包版本。 也许添加一个虚拟属性是最实用的方法,因为模型映射是以串行方式,一个接一个地以及针对特定版本应用的。你怎么看? – Ricardo

+1

如上所述,这是过分的。如有必要,请保留版本用户首选项。如果您坚持使用迁移基础架构,只需*重命名*一个属性,并且迁移应该触发。确保全局替换代码中的属性名称。 – Mundi

相关问题