У меня есть приложение cocoa с использованием данных ядра, которое теперь находится на 4-й версии модели управляемого объекта.
Моя управляемая объектная модель содержит абстрактные объекты, но до сих пор мне удалось получить работу с миграцией, создав соответствующие модели сопоставления и создав мое постоянное хранилище с помощью addPersistentStoreWithType: configuration: options: error, а NSMigratePersistentStoresAutomaticallyOption - YES.
NSDictionary *optionsDictionary = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:NSMigratePersistentStoresAutomaticallyOption];
NSURL *url = [NSURL fileURLWithPath: [applicationSupportFolder stringByAppendingPathComponent: @"MyApp.xml"]];
NSError *error=nil;
[theCoordinator addPersistentStoreWithType:NSXMLStoreType configuration:nil URL:url options:optionsDictionary error:&error]
Это отлично работает, когда я переношу из версии модели с 3 по 4, что связано с добавлением атрибутов нескольким объектам. Теперь, когда я пытаюсь добавить новую версию модели (версия 5), вызов addPersistentStoreWithType возвращает nil, и ошибка остается пустой. Переход от 4 до 5 включает добавление одного атрибута.
Я пытаюсь отладить проблему и проверил все следующие:
-
Исходная база данных на самом деле находится в версии 4, а управляемая объектная модель persistentStoreCoordinator находится в версии 5.
-
Модель сопоставления 4- > 5, а также модели управляемых объектов для версий 4 и 5 присутствуют в папке ресурсов моего встроенного приложения.
-
Я пробовал различные пути обновления модели. Странно я нахожу, что обновление с ранней версии 3 → 5 работает, но обновление с 4 → 5 завершается неудачно.
-
Я попытался добавить политику миграции пользовательских сущностей для переноса объекта, чьи атрибуты меняются... в этом случае я перепробовал метод beginEntityMapping: manager: error:. Интересно, что этот метод вызван, когда миграция работает (т.е. Когда я перехожу от 3 до 4 или от 3 до 5), но он не вызывается в случае неудачи (от 4 до 5).
Я почти не понимаю, что делать дальше. Любые идеи, которые помогут отладить эту проблему, будут высоко оценены.