UIManagedDocument перенести модель данных - PullRequest
4 голосов
/ 29 декабря 2011

Я работаю над приложением для iPhone, которое использует подкласс UIManagedDocument и хранит свои документы в iCloud.

Все работало нормально, пока я не изменил свою базовую модель / схему данных (добавив новую модель).версия - как у меня было несколько раз за последние несколько недель).Я добавил новое свойство и изменил тип данных одного из существующих свойств.

Теперь, когда я запускаю свое приложение, мне кажется, что я не могу загрузить свои документы с UIManagedDocument s -openWithCompletionHandler:,Я могу создавать новые документы и читать / писать их.Если я изменю версию модели данных обратно на 1, то я смогу прочитать существующие документы, но не новые.

Из того, что я понимаю, я выполняю только облегченные миграции к модели данных, и UIManagedDocument - этодолжен справиться с этим правильно?

Любой совет будет принят с благодарностью!

Ответы [ 2 ]

7 голосов
/ 20 ноября 2012

Приведенное ниже основано на моем понимании:

ПРИМЕЧАНИЕ. - Я не пробовал его для iCloud, но я проверил его для non-icloud и, кажется, все в порядке. UIManagedDocument настраивает managedObjectModel и координатор постоянного хранилища отдельно

Когда необходимо выполнить миграцию, просто установите UIManagedDocument s persistentStoreOptions

//Note - In this example, managedDocument is a UIManagedDocument property

self.managedDocument.persistentStoreOptions = [NSDictionary dictionaryWithObjectsAndKeys:
                                        [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
                                        [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];

См:

2 голосов
/ 30 декабря 2011

В подклассе UIManagedDocument вы можете попробовать переопределить managedObjectModel следующим образом:

- (NSManagedObjectModel *)managedObjectModel
{
    NSString *path = [[NSBundle mainBundle] pathForResource:@"<ModelNameHere>" ofType:@"momd"];
    NSURL *momURL = [NSURL fileURLWithPath:path];
    NSManagedObjectModel *managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL];

    return managedObjectModel;
}
...