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真是个麻烦的东西。 

转载于:https://www.cnblogs.com/zsw-1993/archive/2013/05/13/4880086.html

Core Data 是苹果公司提供的一种数据持久化框架,它可以帮助开发者将应用中的数据以对象图的形式进行管理和操作。Add Model Version 是 Core Data 中用于进行数据模型版本管理的功能,它可以帮助开发者对数据模型进行修改,并保证向后兼容性。 下面是使用 Add Model Version 的步骤: 1. 在 Xcode 中打开数据模型文件(.xcdatamodeld),选择菜单中的 Editor -> Add Model Version。 2. 在弹出的对话框中,输入新版本的名称,并选择基于哪个版本进行修改。通常情况下,我们会选择当前版本进行修改。 3. 在新版本中进行修改,可以新增、删除、修改实体、属性等。 4. 在完成修改后,选择菜单中的 Product -> Clean,清除项目中的缓存文件。 5. 在 CoreData 的初始化代码中,修改持久化存储协调器的配置,让它使用新版本的数据模型。 示例代码如下: ```swift let container = NSPersistentContainer(name: "DataModel") // 将持久化存储协调器的配置改为使用新版本的数据模型 container.loadPersistentStores(completionHandler: { (storeDescription, error) in if let error = error as NSError? { fatalError("Unresolved error \(error), \(error.userInfo)") } }) ``` 6. 运行应用程序,Core Data 会自动检测并升级数据模型,保证向后兼容性。 需要注意的是,使用 Add Model Version 修改数据模型后,需要重新生成 NSManagedObject 子类。可以选择菜单中的 Editor -> Create NSManagedObject Subclass,或者使用命令行工具生成。 另外,如果应用程序已经上线并且使用了旧版本的数据模型,需要保证新版本的数据模型能够向下兼容,即旧版本的数据可以被正确地转换为新版本的数据。为此,可以使用 Core Data 提供的版本兼容性工具进行测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值