轻度迁移一对一到一对多

时间:2014-02-20 11:31:08

标签: ios core-data

可以将一对一关系轻度迁移为一对多关系。架构已正确更新。即A-> B变为A-> B> p

但是A-> B中的一对一参考丢失了。我希望在迁移后访问B,但它现在是一个没有任何人引用它的僵尸。

我是否必须为此创建映射模型?

1 个答案:

答案 0 :(得分:1)

创建映射模型将触发重量级迁移。重度迁移非常缓慢并且内存密集。如果您在iOS上运行,那么您不希望这样做。

如果自动迁移失败,那么您可能希望执行导出/导入类型迁移,而不是进行大量迁移。

基本上对于导出/导入迁移,您可以浏览现有的Core Data模型并将其导出为其他格式(我喜欢使用JSON),然后将其导回到新的数据模型中。

如果您在桌面上,那么您肯定可以使用繁重的迁移。桌面有更多可用内存,更大的CPU等等。

更新

  

我想到了这一点,但它很复杂。我必须在应用程序启动时首先导出。然后以编程方式将xcdatamodelid的模型版本更改为下一个版本。然后让光迁移完成它的工作。然后导入。对于之后的每个应用程序启动,我必须检查模型版本是否是最新的,所以我知道是否要迁移。

是的,这很复杂,尽管你不会这样做。另一种选择是进行重量级的迁移,这会导致弹出记忆,弹出看门狗并花费更长时间,从而造成糟糕的用户体验。

如果轻量级迁移无法执行某些操作,则需要进行大量迁移或手动迁移。大量迁移(使用映射模型)不是为iOS设计的。它是OS X时代的延续。是的,你可以让它工作,但它不是高效的。

进行手动迁移并不困难。作为启动过程的一部分,您应该检查迁移事件。如果发生迁移事件,则通过使用旧模型站起旧堆栈继续进行手动迁移。 NSManagedObjectModel有解决此问题的方法。然后导出到JSON,站起来堆叠并导入。