映射模型为NULL - 核心数据迁移

时间:2012-07-17 00:20:35

标签: core-data xcode4.3 ios5.1 core-data-migration

我按照这个好的教程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数据库迁移相比,这种核心数据迁移过于复杂和困难 - 浪费了太多时间。

提前感谢!

1 个答案:

答案 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];

我通过查看我的应用程序包找到了我的地图模型的文件名。