使用PersistentStore的iOS应用程序coreData作为静态sqlite数据迁移?

时间:2015-04-28 11:28:43

标签: ios objective-c sqlite core-data core-data-migration

该应用程序使用bundle目录中的静态sqlite(初始数据)作为Coredata的持久存储。 sqlite有7个表,其中一个表通过添加额外的列/字段进行修改。如何让coreData了解持久存储(存储)已更改并且需要采用新更新? 对于sqlite是否有任何模型版本概念,就像我们为coredata做的那样?

2 个答案:

答案 0 :(得分:10)

对于那些不想深入了解文档并正在寻找快速解决方案的人:

1>打开.xcdatamodeld文件

2 - ;点击编辑

3>选择添加模型版本...

4>添加模型的新版本(添加了新的数据模型组)

5个选择主文件,打开文件检查器(右侧面板)

6个在Versioned核心数据模型下,为当前数据模型选择新版本的数据模型

7个这不是全部)你应该执行所谓的“轻度迁移”。

8是氢。转到AppDelegate并找到正在创建persistentStoreCoordinator的位置

9基找到这一行if(![_ persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:& error])

10 -10用@ {NSMigratePersistentStoresAutomaticallyOption替换nil选项:@YES,NSInferMappingModelAutomaticallyOption:@YES}(实际在该方法的注释代码中提供)

你去吧,玩得开心! 附:这仅适用于轻量级迁移。为了使您的迁移符合轻量级迁移的要求,您的更改必须限制在这个狭窄的范围内:

添加或删除属性(属性或关系)。

使非可选属性可选。

只要您提供默认值,就可以选择非可选属性。

添加或删除实体。

重命名属性

重命名实体。

答案 1 :(得分:0)

如果您只是向实体添加属性,则可以使用Apple documentation上的coredata轻量级迁移建议

NSError *error = nil;
NSURL *storeURL = <#The URL of a persistent store#>;
NSPersistentStoreCoordinator *psc = <#The coordinator#>;
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
    [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
    [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];

BOOL success = [psc addPersistentStoreWithType:<#Store type#>
                    configuration:<#Configuration or nil#> URL:storeURL
                    options:options error:&error];
if (!success) {
    // Handle the error.
}