我按照这个好的教程http://mipostel.com/index.php/home/70-core-data-migration-standard-migration-part-2进行核心数据迁移。
由于一些奇怪的原因,我总是在这些行中的mappingModel中得到NULL:
NSMappingModel *mappingModel = [NSMappingModel mappingModelFromBundles:nil
forSourceModel:sourceModel
destinationModel:destinationModel];
(链接代码中的第191行)
我试图创建一个非常简单的模型派生版本,我重新创建了一个1000次的mappingModel,确保映射模型文件在项目目录中 - 但是这个调用总是返回NULL。
有人知道这里有什么问题吗?
ps我只是想知道在使用映射模型后调用设置迁移选项。
NSURL *storeUrl = [NSURL fileURLWithPath:storePath];
NSError *error;
NSDictionary *pscOptions = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:NO], NSInferMappingModelAutomaticallyOption,
nil];
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:storeUrl
options:pscOptions
error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
(第123行......)
反正
为什么找不到映射模型?
pss无法阻止:-)与进行简单的SQL数据库迁移相比,这种核心数据迁移过于复杂和困难 - 浪费了太多时间。提前感谢!
答案 0 :(得分:4)
我遵循了同样的教程,最后不得不通过URL手动打开我的映射模型
NSString *mappingModelPath = [[NSBundle mainBundle] pathForResource:@"mappingModel10" ofType:@"cdm"];
NSLog(@"mapping model path:%@", mappingModelPath);
NSURL *mappingModelUrl = [NSURL fileURLWithPath:mappingModelPath];
NSMappingModel *mappingModel = [[NSMappingModel alloc] initWithContentsOfURL:mappingModelUrl];
我通过查看我的应用程序包找到了我的地图模型的文件名。