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