你不仅可以做到这一点,从某种意义上说,这是你可以做到这一点的唯一方法。来自苹果文档 http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/vmVersioning.html#//apple_ref/doc/uid/TP40004714-SW8,“要创建版本化模型,您需要从普通模型开始......”
你的 v1 有一个普通的模型。只要您拥有该模型,并且按照该教程中链接的步骤创建版本化模型,轻量级迁移就会起作用 - 如果您的迁移满足通常的轻量级迁移要求。轻量级迁移发生在您的 v2 应用程序中(或 v1.1 或其他应用程序中)。 v1 应用程序中的数据模型本质上没有相关性。 Core Data 需要的是找到新的 v2 应用程序具有与本地设备上的 Core Data 存储中找到的内容相匹配的数据模型副本,并且具有描述您希望如何存储数据的新数据模型从现在开始。如果所需的更改满足轻量级迁移的要求,那么它就会执行。
这些要求是什么?从Apple 关于轻量级迁移的文档 http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/vmLightweight.html#//apple_ref/doc/uid/TP40008426-SW1:
为了执行轻量级迁移,Core Data 需要能够找到
源和目标管理对象在运行时自行建模。
(Core Data 搜索 NSBundle 的 allBundles 返回的包并
allFrameworks 方法。)然后它必须分析架构更改以
持久化实体和属性并生成推断映射
模型。为了使 Core Data 能够做到这一点,更改必须适合
明显的迁移模式,例如:
• 简单添加新属性
• 非可选属性变为可选
• 可选属性变为非可选,并定义
默认值。
如果重命名实体或属性,您可以设置
将目标模型中的标识符重命名为
源模型中相应的属性或实体。你通常
使用 Xcode 数据建模工具设置重命名标识符(例如
NSEntityDescription 或 NSPropertyDescription 对象)。在
Xcode,重命名标识符位于详细信息的用户信息窗格中
版本哈希修饰符下方的窗格(请参阅 Xcode 中的浏览器视图)
核心数据工具)。您还可以使用在运行时设置标识符
设置重命名标识符:.例如,要处理
• 将实体 Car 重命名为 Automobile,
• 并重命名汽车的颜色
属性为paintColor
您将在之后添加以下代码
加载目标数据模型,并在尝试打开之前
存储文件:
NSEntityDescription *automobile = [[destinationModel entitiesByName] objectForKey:@"Automobile"];
[automobile setRenamingIdentifier:@"Car"];
NSPropertyDescription *paintColor = [[automobile attributesByName] objectForKey:@"paintColor"];
[paintColor setRenamingIdentifier:@"color"];
总之,您没有错过机会,现在使用 Core Data 的这些功能还为时不晚。 :) 为了回答您的具体问题,您不需要对文档中概述的标准步骤进行任何更改。
稍后更新根据您对另一个答案的评论进一步的想法,您说:
所以只是为了确认,我不必在 XCode 中回溯我的核心数据
模型到看起来像 v1 的样子,然后对其进行版本控制?所以我可以
只需在我的位置创建第一个核心数据模型版本
应用程序是 v2 吗?
从你在这里所说的来看,这个问题似乎与最初的问题不同。您最初的问题表明您已经发布了应用程序的 v1,而没有显式添加版本化模型。但是,此声明意味着您已对应用程序 v2 的核心数据模型进行了更改,而无需首先创建版本化数据模型。这是完全不同的事情。
如果是这样的话,那么你的工作就更加困难了。但是,假设您保留源代码的备份或在 git 之类的存储库中管理代码(我建议所有开发人员都这样做),您可以检索所需的内容。如果您已经将核心数据模型更改为 v2,您需要做的是将当前数据模型转换为版本化模型,然后恢复/签出应用程序 v1 的副本,将核心数据模型(*. xcdatamodel 文件)从那里复制到当前项目中,这样您就可以同时拥有 v1 数据模型和较新的数据模型。然后,您将有可能能够使用轻量级迁移,如上所述。
请注意,这里的关键问题是您何时更改数据模型。您的应用程序称为 v1 还是 v2 本质上与问题无关,除了显然您可能在将应用程序的版本号更改为 v2 的同时引入了对数据模型的更改。