CoreData:如何迁移未版本控制的商店?
CoreData: How do you migrate an unversioned store?
所以我正在开发一个已发布给用户的项目。在我动手做这个项目之前,这个项目有1.0和2.0版本,v2.0修改了核心数据的数据模型,但是做这个的人没有给数据模型添加新版本。
所以当用户从v1.0升级到v2.0时,它会崩溃。
我现在的问题是我正在部署 v3.0,如何修改我的 xcdatamodel 以便使用 v1.0 和 v2.0 的用户都可以毫无问题地升级到 v3.0?
想到的唯一可行解决方案似乎是在捆绑包中包含两个 数据模型。 (本质上,版本控制系统做了类似的事情。)
使用第一个模型读取数据,然后"manually"将其复制到第二个模型的数据存储中(根据需要进行修改)。从那时起,只使用第二个模型(应该为将来的更改版本化)。
我会阻止 UI 并张贴 "migrating your data" 之类的消息,以确保没有用户交互干扰此过程。
获取 V1 模型并向其添加一个与 v2 相同的新版本,然后向其添加另一个 V3 模型,这样您最终会得到一个包含所有三个版本的模型。这样,您应该能够使用以前版本中的任何一个的轻量级迁移,假设您的模型更改实际上将支持轻量级迁移。如果没有,请按照@Mundi 的建议进行手动迁移。如果您不再拥有源代码,则可以从 V1 应用程序包中恢复 V1 模型,但您确实需要 V1 应用程序包的副本才能这样做。您可能需要 google 了解如何执行此操作,或者让我知道,我会四处寻找,因为我会在某处记录它...希望这有帮助。
所以我正在开发一个已发布给用户的项目。在我动手做这个项目之前,这个项目有1.0和2.0版本,v2.0修改了核心数据的数据模型,但是做这个的人没有给数据模型添加新版本。
所以当用户从v1.0升级到v2.0时,它会崩溃。
我现在的问题是我正在部署 v3.0,如何修改我的 xcdatamodel 以便使用 v1.0 和 v2.0 的用户都可以毫无问题地升级到 v3.0?
想到的唯一可行解决方案似乎是在捆绑包中包含两个 数据模型。 (本质上,版本控制系统做了类似的事情。)
使用第一个模型读取数据,然后"manually"将其复制到第二个模型的数据存储中(根据需要进行修改)。从那时起,只使用第二个模型(应该为将来的更改版本化)。
我会阻止 UI 并张贴 "migrating your data" 之类的消息,以确保没有用户交互干扰此过程。
获取 V1 模型并向其添加一个与 v2 相同的新版本,然后向其添加另一个 V3 模型,这样您最终会得到一个包含所有三个版本的模型。这样,您应该能够使用以前版本中的任何一个的轻量级迁移,假设您的模型更改实际上将支持轻量级迁移。如果没有,请按照@Mundi 的建议进行手动迁移。如果您不再拥有源代码,则可以从 V1 应用程序包中恢复 V1 模型,但您确实需要 V1 应用程序包的副本才能这样做。您可能需要 google 了解如何执行此操作,或者让我知道,我会四处寻找,因为我会在某处记录它...希望这有帮助。