更新时间:2022-10-03 21:08:09
本节书摘来自华章出版社《Core Data应用开发实践指南》一书中的第3章,第3.1节,作者 (美)Tim Roadley,更多章节内容可以访问云栖社区“华章计算机”公众号查看
在应用程序的进化过程中,其托管对象模型也可能需要改变。对于一些比较简单的修改,诸如设定属性的默认值、设定验证规则、使用获取请求模板等,是可以直接实施的。而对于另外一些更为结构化的(structural)修改,则需先把持久化存储区迁移到新的模型版本才行。假如没有提供迁移数据所需的映射与设定,那么应用程序就会崩溃。
为了继续构建范例程序,需要把上一章中的代码添加到Grocery Dude项目中。或者可以去http://www.timroadley.com/LearningCoreData/GroceryDude-AfterChapter02.zip下载ZIP文件,并将其解压缩,这个文件包含了项目到目前为止的全部内容。在使用来自ZIP文件的Xcode项目时,应该先点击Product>Clean菜单项,这样可以清除掉同名项目所残留的缓存。在学习本章的过程中,***能用iOS 仿真器来运行程序,因为这样更容易查看到SQLite数据库文件里的内容。
请按下列步骤修改Grocery Dude,以引发模型不兼容错误:
对于处在开发初期的应用程序来说,这种崩溃算不上什么大问题,我们只需把程序删了并重新运行一遍就好。删除之后,再次运行应用程序时,它会按照最新的模型来创建持久化存储区。这样一来,存储区就可以和模型相兼容了,于是应用程序也就不再崩溃了。但是,这样做也会失去存储区里原有的数据。对于已经在App Store上架的程序来说,这让人无法接受。有好几种办法都可以迁移现有的持久化存储区,而迁移路径则是由变更的复杂程度以及是否使用iCloud等因素来决定的。无论采用哪种迁移办法,我们都必须首先熟悉“模型版本控制”(model versioning)。
请按下列步骤修改Grocery Dude,以便将模型恢复到修改前的状态: