2012-05-21 102 views
0

我们正在执行我们的第一个iOS应用更新,也是我们的第一次Core Data迁移。核心数据迁移 - 从先前版本迁移选定数据

它似乎比我在网上看到的标准和轻量级核心数据迁移的例子更复杂,但也许我错过了一些东西。

我们的场景是我们已经更新了.xcdatamodel(简单地添加了一个新字段)以及我们的应用程序中使用的很多参考数据(存储在我们的核心数据数据库中),但是我们需要保留一些用户数据(存储在相同的核心数据数据库中)。

我已经将模型定义的多个版本添加到我们的.xcdatamodelld文件中,并且玩过轻量级核心数据迁移过程(使用映射模型(.xcmappingmodel文件)),它成功更新模型,但是我看不出有什么明显的方式可以让我们将选择的数据(用户数据)从以前版本的数据库导入到与下一版本应用程序捆绑在一起的新数据(包含我们更新的参考数据) 。

任何有关如何处理这种情况的建议将非常感谢。

由于提前,泰德

回答

0

最后,我们通过将用户数据放入plist文件(其中的数量相当有限)并保留Core Data数据库仅用于系统中的参考数据来解决此问题,所以它可以在未来被覆盖而不用担心。

轻量迁移在首次运行时更新数据模型,然后一次性迁移调用将创建并填充用户数据plist文件,重命名v1核心数据持久性存储* _migrated.sqlite,将v2 sqlite数据库从绑定到文档目录中,然后重置MOM,并将MOM,MOC和永久存储设置为零,以便下次启动Core Data时,它将使用v2 sqlite数据库作为永久存储。

Phew。我希望这对任何读者都有意义,可以随时索取任何其他细节,但实际上这比听起来简单得多!

1

你的用户数据库将被升级‘到位’。不会有任何迁移或进口/出口的必要。当用户运行应用程序的新版本时,现有数据库将使用新字段进行升级。我不确定这是否回答你的问题,但不会有任何“导入”正在进行。

+0

嗨Melsam, 感谢您的回答。我意识到轻量级迁移将简单地更新用户的现有数据库。我想要做的是在软件包中包含一个新的数据库文件,将用户数据从以前的数据库迁移到它中,然后最后删除以前的数据库。 我开始意识到这可能不是一个非常标准的核心数据迁移场景,并且道歉如果我的问题没有描述出色的情况... – Ted

+1

对不起,我不明白你的问题。您所描述的内容似乎比轻量级迁移可以处理的要复杂得多。似乎手动移动数据是最佳选择(即通过初始化多个NSPersistentStoreCoordinator)。 – melsam

+0

是的,我想是的。我现在开始后悔参考数据和用户数据都存储在同一个持久存储现在...巴。不管怎么说,还是要谢谢你。 – Ted