【发布时间】:2012-03-24 11:26:21
【问题描述】:
我正在对我们的应用升级版本的对象模型进行相当多的更改,即。添加/删除的实体,新的属性和关系。看起来这项工作真的会增加适当的核心数据迁移。由于数据主要用作缓存以增强离线浏览体验。在这一点上真的需要迁移我认为如果它只是被吹走并重新创建会简单得多。
根据我遇到的有关该主题的各种帖子,一般策略是
- 检测模型已更改(通过在 managedObjectContext 的初始化)
- 删除持久存储(在我们的 iOS 案例中是 sqlite 文件)
- 使用最新模式重新初始化 objectModel 重新初始化持久存储 使用新模型
这是重新初始化 objectModel 的代码
- (NSManagedObjectModel *)managedObjectModel {
if (managedObjectModel != nil) {
return managedObjectModel;
}
NSString *path = [[NSBundle mainBundle] pathForResource:@"<model name>" ofType:@"momd"];
NSURL *momURL = [NSURL fileURLWithPath:path];
managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL];
return managedObjectModel;
}
并使用
重新创建 objectModel 和存储objectManager = [RKObjectManager objectManagerWithBaseURL:
[NSString stringWithFormat:@"http://%@/v3",
[[NSBundle mainBundle] objectForInfoDictionaryKey:@"APIDomain"]]];
NSManagedObjectModel *objectModel = [self managedObjectModel];
objectManager.objectStore = [RKManagedObjectStore objectStoreWithStoreFilename:storeName usingSeedDatabaseName:nil managedObjectModel:objectModel delegate:nil];
但是,我收到以下错误:
由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“+entityForName:找不到实体名称“UTCity”的 NSManagedObjectModel”
我觉得已经很接近了,因为重启应用成功创建新商店运行正常。
-PF
【问题讨论】: