2010-11-29 3 views
5

У меня есть приложение Core Data, и я переносил (обновлял) базовую модель данных. Каждый раз, когда я создаю новую версию, я создаю модель сопоставления для каждой версии. Прямо сейчас у меня есть 16 версий, и у меня есть модели для сопоставления, которые выглядят следующим образом: 1to2.xcmappingmodelto3.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]]; 

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

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

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

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

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

жаль быть приносящим плохие новости

+1

Да спасибо ... Я только что нашел его в книге Маркус Сарра Core Data ... он написал большую процедуру перенастройки от каждой модели к другой без написания дополнительной модели отображения. Перейти к проверке на NSINfersMappingModel Спасибо! – 2010-11-30 00:02:37