CoreData 迁移 MappingModel

在使用coredata后,如果添加了字段程序需要升级那么如果不设置coredata的数据迁移,升级后的app会直接崩溃

下来来看怎么设置coredata的轻量迁移(我的是xcode4.3.2)

1.选中mom文件选择菜单editor->Add Model Version

添加一个新的版本

2.选择最上层.xcdatamodeld文件,在属性栏找到versioned core data model,设置添加的version为当前用的

3,修改下面的代码

 

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator

{

if (persistentStoreCoordinator != nil)

    {

returnpersistentStoreCoordinator;

}

 

NSURL *storeUrl = [NSURLfileURLWithPath: [[selfapplicationDocumentsDirectory]stringByAppendingPathComponent: @"Demo.sqlite"]];

 

// handle db upgrade 迁移

NSDictionary *options = [NSDictionarydictionaryWithObjectsAndKeys:

[NSNumbernumberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,

[NSNumbernumberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];

 

NSError *error = nil;

persistentStoreCoordinator = [[NSPersistentStoreCoordinatoralloc]initWithManagedObjectModel: [selfmanagedObjectModel]];

if (![persistentStoreCoordinatoraddPersistentStoreWithType:NSSQLiteStoreTypeconfiguration:nilURL:storeUrl options:options error:&error]) 

    {

        NSLog(@"failed to add persistent store with type to persistent store coordinator");

        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);

 

}

returnpersistentStoreCoordinator;

}

 

4.在新数据模型的文件上添加字段,记得在类文件里也要添加上你添加的新字段,可以删除原来的类文件,重新生成manageobject类。

 

5。选中.xcmappingmodel文件,点击editor->update default mapping,或refresh

到这里如果你再运行app没问题,那应该就迁移成功了,要是这样就很容易了,关键是很多时候会出一些问题

下面记录一下我碰到的问题,搞了一个下午才找到症结,我的问题的情况和这个地放描述的问题一样

http://stackoverflow.com/questions/8924230/strange-core-data-error-during-migration/11791285#11791285

错到

-(NSPersistentStoreCoordinator*)persistentStoreCoordinator

{

这个里面。报的错误是

    "Error Domain=NSCocoaErrorDomain Code=1570 "The operation couldnU2019t be completed. (Cocoa error 1570.)" UserInfo=0x7b5890 {NSValidationErrorObject=<NSManagedObject: 0x7c65b0> (entity: Profile; id: 0x702df0 <x-coredata://B65DFAF9-47BA-4477-85BB-3C3C8FD6F4A7/Profile/p502> ; data: <fault>), NSValidationErrorKey=toUser, NSLocalizedDescription=The operation couldnU2019t be completed. (Cocoa error 1570.)}",


仔细看这个提示,先看到错误是在 表Profile里面,接下来看key,是toUser到coredata里面的profile表我们找到toUser这个relationship,发现它的optional选项没勾上,打上勾搞定。

一个小问题,但是使app产生的结果就是直接crash。

话说coredata真是个麻烦的东西。 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值