Миграция через несколько версий в основных данных - PullRequest
5 голосов
/ 30 ноября 2010

У меня есть приложение Core Data, и я выполняю миграцию (обновление) модели основных данных. Каждый раз, когда я создаю новую версию, я создаю модель сопоставления для каждой версии. Сейчас у меня 16 версий, и у меня есть картографические модели, которые выглядят так: 1to2.xcmappingmodel 2to3.xcmappingmodel 3to4.xcmappingmodel ...так далее. до 16

Это работает нормально, но проблема возникает, когда один пользователь имеет файл данных с версией 10 и обновляет приложение с версией 16. В некотором смысле я думал, что Core Data автоматически обновится с 10 до 16, но обнаруживается ошибка, что говорит "Отсутствует модель картирования". Чтобы убедиться, что модели сопоставления верны, я обновляю их до каждой версии одну за другой (10–11, 11–12 и т. Д.), И это сработало ... Вот мой код.

Я указываю версию модели с этим кодом:

NSBundle *modelWrapper = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"TaskApp_DataModel" ofType:@"momd"]];
NSString *modelPath = [modelWrapper pathForResource:@"TaskApp_DataModel 16" ofType:@"mom"];
NSLog(@"%@",modelPath);
managedObjectModel = [[NSManagedObjectModel alloc]initWithContentsOfURL:[NSURL fileURLWithPath:modelPath]];

И здесь я определяю опцию Автоматическая миграция:

  NSURL *url = [NSURL fileURLWithPath: [applicationSupportDirectory stringByAppendingPathComponent: @"storedata-sql"]];


NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:[NSNumber numberWithBool:YES] forKey:NSMigratePersistentStoresAutomaticallyOption];



if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType 
                                            configuration:nil 
                                            URL:url 
                                            options:dict 
                                            error:&error]){

Кто-нибудь знает, как обновить это? Спасибо.

1 Ответ

1 голос
/ 30 ноября 2010

он будет пытаться перейти только от текущей версии пользователя (возможно, v1) к текущей версии.если у вас есть 3 версии, то вам нужны карты для v1-v2, v2-v3, v1-v3.все 16 версий отправлены?в этом случае вам может понадобиться начать создавать новые карты миграции, возможно, стоит также включить автоматическую миграцию, если вы еще не пробовали ее, поскольку она может очень хорошо заполнить пробелы.я думаю, что это:

[dict setObject:[NSNumber numberWithBool:YES] forKey:NSInfersMappingModel];

, но вам придется перепроверить это.

извините, что принесу плохие новости

...