Core data 映射模型是空核心数据迁移

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

我按照这个不错的教程来做我的核心数据迁移

出于某种奇怪的原因,我总是在以下几行的mappingModel中得到NULL:

 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文件。