转自:http://blog.csdn.net/sirchenhua/article/details/7302729
coredata与tableview配合十分默契,而开发初期经常需要变动coredata的数据模型结构,不同的模型必须要进行迁移,否则App就crash了。
迁移就是要在老版本和新版本的数据库模型之间建立映射(mapping),这是当数据库模型变动较“大”时必须使用的方法,而当变动较小时,Coredata能够自动推导模型变化而进行迁移,这是所谓轻量级迁移lightweight migration。
何谓变化“小”
1.增加属性
2.删除属性
3.非可选属性变成可选属性
4.可选属性变成非可选属性,且指定一个默认值
5.重命名实体或属性
6.增加关系及改变关系的类型
增加或删除关系,重命名关系,改变关系类型(一对一,一对多,。。。)
7. 改变实体层级(hierarchy)
增加、删除和重命名实体,创建实体的父、子实体或在实体继承结构中上下移动,将实体移出继承结构
其实可以允许的变化一点也不小吧,:)
好了,看下轻量级迁移的步骤:
1. 在得到persistentstore时,一般是在appdeleate的persistentStoreCoordinator方法中,为addPersistentStoreWithType:configuration:URL:options:error:方法的options传递参数,模板产生的方法该参数是nil。
为支持自动迁移,传递一个包含2个key的字典作为参数,NSMigratePersistentStoresAutomaticallyOption和NSInferMappingModelAutomaticallyOption,赋值YES。
其实用模板生成的启动Coredata工程仔细看的话该函数下面有段注释
2. 创建新版本并选择当前active模型版本,
xcode 4里,创建新模型是在Editor里的Add Model Verison,
要选择当前使用的数据模型版本,在文件导航中,先选中appname.xcdatamodeld这个,然后在右侧属性栏中Versiond Core Data Model中选择Current的模型版本。
3.OK了,再次运行,App可以访问新版本的coredata数据库模型了。