本节书摘来自华章出版社《core data应用开发实践指南》一书中的第3章,第3.2节,作者 (美)tim roadley,更多章节内容可以访问云栖社区“华章计算机”公众号查看
为了不使应用程序像图3-1那样崩溃,我们需要在修改模型之前先创建新的模型版本。添加新模型之后,就不应该再删除旧版的模型了。旧的模型有助于把原来的持久化存储区迁移到当前的模型版本。假如用户的设备上原来就没有持久化存储区,那么可以先不考虑模型版本控制问题,等到应用程序在app store上架之后再说。
请按下列步骤修改grocery dude,以便添加模型版本:
选中model.xcdatamodeld。
点击editor>add model version...菜单项。
点击finish按钮,将model 2用作版本名称。
现在项目中应该会有两个版本的模型了,如图3-2所示。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLkRzM3kzY2IWNmdTO1E2YlJWN1kjZkNWNxYDZ2IjZyQTO2MTN2YWMy8CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
model 2.xcdatamodel这个新模型的内容一开始便与model.xcdatamodel完全相同,而开发者不经意间就会在错误的模型版本上进行修改。所以,为了防止这一情况,在编辑模型之前,应再三检查你所选定的模型是不是自己要编辑的那个版本。应该养成抓取快照的习惯,甚至可以在编辑模型之前把整个项目都备份起来。
请按下列步骤修改grocery dude,以便重新引入measurement实体:
可以在执行修改之前先抓取快照或备份整个grocery dude项目。
选定model 2.xcdatamodel。
创建名为measurement的新实体。
选定measurement实体,创建名叫abc的属性,并将其类型设为string。
添加了新版模型之后,必须将其设为当前版本(current version),然后才能使应用程序使用它。
请按下列步骤修改grocery dude,以便修改当前的模型版本:
选定model.xcdatamodeld。
点击view>utilities>show file inspector菜单项(或按“option++1”组合键)。
将current model version设为model 2,如图3-3所示。
如果想正常运行应用程序,那么我们还必须配置好迁移选项,告诉core data应该如何迁移。要是现在就去运行应用程序的话,那自然还是会发生store is incompatible(存储区不兼容)错误。