Облегченная миграция базовых данных - модели слияния не могут - PullRequest
3 голосов
/ 10 сентября 2010

Мне нужно добавить некоторые атрибуты в мою базовую модель данных, и я ужасно переживаю, чтобы облегченная миграция начала работать!

Я получаю сообщение об ошибке "Не могу объединить модели с двумя разными объектами с именем blah".

Вот что я сделал ...

  1. Добавлен этот код в мой делегат приложения.

    • (NSPersistentStoreCoordinator *) persistentStoreCoordinator {

      // бла-бла

      NSDictionary * options = [NSDictionary dictionaryWithObjectsAndKeys:
      [NSNumber numberWithBool: YES], NSMigratePersistentStoresAutomaticsOption,
      [NSNumber numberWithBool: YES], NSInferMappingModelAutomaticsOption, ноль];

      // бла-бла

      return _persistentStoreCoordinator;
      }

  2. Нажмите на мою модель данных, выберите Дизайн> Модель данных> Добавить версию модели.

  3. Я внес свои изменения в тот, который имеет наименьшее число, добавив несколько атрибутов.

  4. Удалил все управляемые файлы, созданные из моей предыдущей модели, отправил их в корзину, а затем создал новые из новой модели.

  5. Убраны все цели.

  6. Построй и уходи.

ОШИБКА.

Пожалуйста, помогите. Я пробовал вышеупомянутое различными способами и множеством других вещей, каждый раз возвращаясь к чистой копии моего проекта и начиная снова, и ничто не помогло мне преодолеть эту ошибку.

Спасибо!

Ответы [ 2 ]

4 голосов
/ 10 сентября 2010

Ну, еще раз, еще 6 часов моей жизни полностью потрачены впустую, потому что Apple - куча ... ну, я остановлюсь там

В любом случае, благодаря этому прекрасному человеку: http://linkroller.com/fullpage/ad/13754/?http://iphonedevelopment.blogspot.com/2009/09/core-data-migration-problems.html Я смог решить проблему.

Вы выполняете шаги, которые я уже выполнил, тогда вам нужно найти следующий метод:

- (NSManagedObjectModel *)managedObjectModel {

    if (managedObjectModel != nil) {
        return managedObjectModel;
    }

    managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];    
    return managedObjectModel;
}

и измените его на:

- (NSManagedObjectModel *)managedObjectModel {

    if (managedObjectModel != nil) {
        return managedObjectModel;
    }

    NSString *path = [[NSBundle mainBundle] pathForResource:@"Foo" ofType:@"momd"];
    NSURL *momURL = [NSURL fileURLWithPath:path];
    managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL];

    return managedObjectModel;
}

где foo - имя вашего файла xcdatamodeld.

AAAAAARGH.

1 голос
/ 06 января 2012

Я исправил миграцию данных ядра

, пожалуйста, следуя этим шагам

  1. Go AppDelegate.m функция записи

    -(NSPersistentStoreCoordinator *)persistentStoreCoordinator
     {
       if (__persistentStoreCoordinator != nil)
       {
         return __persistentStoreCoordinator;
         }
    
            NSString *databaseFilePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"sampleiOS.sqlite"];
    
            NSURL *storeUrl = [NSURL fileURLWithPath: databaseFilePath];
    
            NSDictionary *_option = [NSDictionary dictionaryWithObjectsAndKeys:
                         [NSNumber numberWithBool:YES],            NSMigratePersistentStoresAutomaticallyOption,
                         [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
            NSError *error = nil;
    
            __persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    
           if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:_option error:&error]) {
    
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    
         }
    
       return __persistentStoreCoordinator;
     }
    
  2. , затем выберите файл example.xcdatamodeld

  3. нажмите вверху меню редактора => добавить версию модели => создать новуюверсия модели "example 2.xcdatamodel", затем нажмите кнопку "Готово".

  4. теперь показывают две основные версии модели данных, одна из которых является источником "example.xcdatamodel", другая является пунктом назначения "example 2.xcdatamodel".

  5. сейчас добавить атрибут или сущность в новую версию модели данных "пример 2.xcdatamodel" .затем щелкните модель данных группы «example.xcdatamodeld» .После этого установите текущую версию как вновь созданную модель данных "example 2.xcdatamodel".

Как установить текущую версию

выберите show utilities => show inspector => версионная базовая модель данных.затем установите текущую версию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...