3

我按照这个不错的教程 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 行)

我尝试创建一个非常简单的模型派生版本,我重新创建了一个 mappingModel 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 迁移相比,这个核心数据迁移的东西过于复杂和困难——浪费了太多时间。

提前非常感谢!

4

1 回答 1

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

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

于 2012-07-17T13:38:41.077 回答