我一直在为我的应用程序使用核心数据,并且升级了很多次(10-11次),但是用户现在抱怨应用升级后存储在核心数据数据库中的数据丢失了。
以前,在发布新版本之后,我将从旧版本中创建新的模型版本,并处理相同的模型,并根据需要对其进行更改。在发布之前,我正在更新我的.xcmappingmodel模型。
现在我已经准备好下一个发行版了,我脑子里没有几个问题:-
1) xcode中可以有多个.xcmappingmodel文件吗?
( 2)数据从模型到模型之间的传递是否需要人工执行。示例:-模型版本1.0至1.1、1.1至1.2、1.2至1.3以及很快。
假设任何一个应用程序用户都没有进行升级并使用该应用程序的旧版本(比如1.0),现在我已经准备好发布3.0版本了。我们是否需要为逐步迁移提供功能?
示例:- 1.0到1.1,1.1到1.2,或者说他的数据库将自动升级到更新版本,保留以前存储的数据。
任何关于如何处理这种情况的建议都将不胜感激。
提前谢谢。
发布于 2014-01-29 10:19:29
是的,对于数据模型版本中的每个步骤,您不仅可以而且需要多个映射模型。一个1.0到1.1。以及1.1至1.2的一个
这样,存储协调器就可以升级一个旧的模型1.0,例如,一个新的模型3.0。你需要告诉商店协调员更新。它被称为迁徙。
有关CoreData迁移https://developer.apple.com/library/ios/documentation/cocoa/Conceptual/CoreDataVersioning/Articles/Introduction.html的更多信息
发布于 2014-01-29 16:36:19
当您有几个模型时,核心数据不会自动支持渐进迁移。例如,您有模型版本1、2和3。应用程序使用version 1创建了一个持久存储。新版本的应用程序安装在模型的版本3中。核心数据不会自动更新存储区,从版本1到版本2,到版本3。无论是使用轻量级迁移,还是使用正常的、繁重的迁移。
当然,最轻类型的迁移是一种轻量级迁移。你应该试着用它,直到你因为某种原因不能使用为止。它在内存上要快得多,而且要容易得多。
在进行轻量级迁移时,Core Data必须从用于创建正在打开的存储库的模型推断映射模型到应用程序中当前使用的模型。在我们的示例中,这意味着必须能够推断出从版本1到版本2、从1到3以及从2到3的映射模型。
如果由于某种原因不能使用轻量级迁移,并且您正在创建映射模型并使用迁移管理器,那么它仍然不会自动为您进行渐进迁移。因此,您有从1到2和2到3的映射模型。应用程序启动后,商店以前是使用version 1创建的,而当前版本是version 3。您需要指定到迁移管理器模型1,模型3,映射模型从1到3。
当然,这完全是疯了。不能在源模型和目标模型的所有组合之间建立映射模型。解决这一问题的方法是编写您自己的代码,以控制逐步迁移过程。代码基本上会打开现有的存储,为它找到映射模型,将存储迁移到下一个版本,然后重复。
你可以在马库斯·扎拉的核心数据书中找到一个很好的例子来说明如何做到这一点。
https://stackoverflow.com/questions/21427552
复制相似问题