удаление постоянного хранилища основных данных вместо переноса (также с помощью RestKit)

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

Основываясь на различных сообщениях, которые я наткнулся на эту тему, общая стратегия заключается в

  • обнаружении изменения модели (путем перехвата исключения во время инициализация управляемого ObjectContext)
  • удалить постоянное хранилище (в нашем случае на iOS файл sqlite)
  • повторно инициализировать объектную модель с последней схемой повторно инициализировать постоянное хранилище с новой моделью

Это код, который повторно инициализирует объектную модель

- (NSManagedObjectModel *)managedObjectModel {

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

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

return managedObjectModel; 
}

и воссоздает объектную модель и сохраняет ее с помощью

objectManager = [RKObjectManager objectManagerWithBaseURL:
                     [NSString stringWithFormat:@"http://%@/v3", 
                      [[NSBundle mainBundle] objectForInfoDictionaryKey:@"APIDomain"]]];     
NSManagedObjectModel *objectModel = [self managedObjectModel];
objectManager.objectStore = [RKManagedObjectStore objectStoreWithStoreFilename:storeName usingSeedDatabaseName:nil managedObjectModel:objectModel delegate:nil]; 

Однако я получаю следующую ошибку:

Завершение приложения из-за необработанного исключения «NSInternalInconsistencyException», причина : '+entityForName: не удалось найти NSManagedObjectModel для имени сущности 'UTCity''

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

-ПФ

7
задан LU RD 7 March 2012 в 12:16
поделиться