您的位置:首页 > 移动开发 > IOS开发

iOS CoreData数据迁移-默认迁移方式

2017-07-05 10:30 260 查看
 


iOS CoreData数据迁移-默认迁移方式 

我们在开发或者产品升级的时候经常会遇到托管模型的结构化修改(也就是表的结构改变),那么我们就需要数据迁移到新的模型中。

轻量级迁移方式
默认的迁移方式 
迁移管理器迁移方式

现在记录一下默认的迁移。 

当我们的表结构变化较大,轻量级迁移方式不能满足我们的需要。例如:我们要把Entity1 替换成Entity2 并且把Entity1中的name字段迁移到Entity2中的title上面。 这时候我们就可以用默认迁移方式来进行迁移。

首先我们下载要操作的代码,在代码上面一步步操作。下载 

如果你下载过该代码,练习过轻量级迁移方式。运行时会在 


 

崩掉,解决办法就是找到App的安装目录 在/Documents/Stores/中的三个数据库文件删除掉就解决了。

下载完成后,首先运行程序。 

我们appdelegate.m 中
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 

进行了插入数据操作。 

运行完成后我们去app安装目录中查看一下时候有数据。

下面创建数据库新版本 


 


 


 

我们设置新的.xcdatamodel 为运行时使用的版本 


 

现在我们来改写CoreData 2.xcdatamodel中的表结构。 

删除原有的Entity1 实体,新建Entity2实体。 


 

创建Entity2的NSManagedObject Subclass 


 

选择CoreData 2 选择 Entity2 创建完成后需要创建Mapping Model。 


 


 


 

第一个为原DataModel 第二个为新DataModel 别选错了。 

好了创建完成后是这个样子的 


 

设置一下属性 


 


 

意思就是原来实体是Entity1 目标实体是Entity2。 

对应的字段怎么办呢。下面我们来设置。 


 

意思就是title = 原实体的name 属性 ,amount = 原实体的age属性。 

最后我们关闭数据迁移的自动推断属性 



NSDictionary *options = @{NSMigratePersistentStoresAutomaticallyOption:@(YES),
NSInferMappingModelAutomaticallyOption:@(NO)};
1
2
1
2

好了这就完成了 ,我们来试一下。将
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 

的插入语句注释掉换为查找语句,查询下,在新的表结构中是否有数据。是否迁移成功。 




 

迁移成功



顶1
 
踩0
 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: