我正在对我们的应用升级版本即对象模型进行了不少更改。添加/删除的实体,新的属性和关系。看起来这项工作真的可以加入适当的核心数据迁移。由于数据主要用作缓存来增强脱机浏览体验。在这一点上没有真正需要迁移我认为这将是一个更简单的如果它只是吹走和重新创建。删除核心数据持久性存储而不是迁移(也使用RestKit)
基于我遇到关于这一主题的一般策略是
- 各个岗位检测(在 初始化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];
但是存储代码,我收到以下错误:
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '+entityForName: could not locate an NSManagedObjectModel for entity name 'UTCity''
我觉得它非常接近,因为重新启动应用程序成功地创建一个新的商店运行正确。
-PF
有没有这样的运气? – CharlieMezak 2012-07-22 20:07:55