Core data 映射模型是空核心数据迁移
我按照这个不错的教程来做我的核心数据迁移 出于某种奇怪的原因,我总是在以下几行的mappingModel中得到NULL:Core data 映射模型是空核心数据迁移,core-data,xcode4.3,ios5.1,core-data-migration,Core Data,Xcode4.3,Ios5.1,Core Data Migration,我按照这个不错的教程来做我的核心数据迁移 出于某种奇怪的原因,我总是在以下几行的mappingModel中得到NULL: NSMappingModel *mappingModel = [NSMappingModel mappingModelFromBundles:nil forSourceModel:sourceModel
NSMappingModel *mappingModel = [NSMappingModel mappingModelFromBundles:nil
forSourceModel:sourceModel
destinationModel:destinationModel];
(链接代码中的第191行)
我尝试创建一个非常简单的模型派生版本,我重新创建了一个mappingModel a 1000次,确保映射模型文件位于项目目录中,但此调用始终返回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 DB迁移相比,这种核心数据迁移太复杂和困难了,浪费了太多时间
因此,提前向您表示衷心的感谢 我遵循了同样的教程,最后不得不通过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];
我通过查看我的应用程序包找到了映射模型的文件名。事实上,教程似乎有问题-因此,在浪费我的时间之前,请尝试找到另一个文件名…:-()非常感谢-希望这也能帮助其他人避免浪费这么多时间!顺便问一下,其余的工作正常吗?我发现很奇怪,迁移选项是在代码检查是否需要迁移之后设置的。这就是我最终选择另一条路线的另一个原因……我不得不修改该教程中的代码,但这让我走上了正确的道路。我正在写一篇关于我的迁移过程的博文,完成后我会在这里发布一个链接。为什么在迁移后设置选项会很奇怪?这些选项仅在addPersistentStoreWithType中使用,与自定义迁移无关。它们甚至可以是nil,因为它们将用于默认迁移,这里执行的迁移是自定义的。Apple还指出,在addPersistentStoreWithType中检查迁移是昂贵的,并建议在之前使用配置:compatibleWithStoreMetadata,所以这就是为什么在addPersistentStoreWithType;之前检查是有意义的。)@JesseCrocker为什么
的类型为@“cdm”
而不是`的类型为@“xcmappingmodel”?@Colas.xcmappingmodel文件被编译成.cdm文件,这些文件是二进制plist文件。