2013-08-18 3 views
1

В моем приложении используются данные Core. Теперь, с выпуском новой версии, мне нужно изменить структуру базы данных. Я знаю, что это делается путем управления версиями, но все, что я нашел, все учебные пособия не предназначены для приложений на основе документов, и в какой-то момент я застрял. Как можно реализовать Версию в приложении на основе документа, где документ является самой базой данных и может иметь любое имя?Управление версиями основных данных в приложениях на основе документов

Благодаря

--- Дополнительная информация ----

, что я должен был бы сделать это: открыть приложение, нажмите кнопку «Открыть», выберите NSManagedDocument из файловой системы. это моя база данных (может иметь любое имя), если при ее открытии обнаруживает, что она является старой структурой, она должна обновить свою структуру до текущей. (добавлен один столбец)

+0

Куда вы попали? Или, точнее, где вы застряли? – Mundi

+0

во всех примерах, я обнаружил, что мне нужно указать имя базы данных, но поскольку его приложение на основе документа и база данных являются файлами, оно может иметь любое имя. Также мне нужно добавить постоянные параметры хранилища в файле appdelegate.m, но в приложении на основе документа у меня есть только файл document.m. вставка кода опций там не работает, я получаю много ошибок. довольно зеленый здесь. thanks – sharkyenergy

+0

Извините, ваш уровень танец, что этот сайт не сможет вам помочь. Вы должны понять, что вы делаете в первую очередь. Самый прагматичный совет для вас: отказаться от NSManagedDocument и просто следовать шаблонам основных данных. – Mundi

ответ

2

Мне кажется, что факт, что вы обертываете хранилище SQLite в NSManagedDocument, не имеет отношения к процедуре управления версиями модели.

Просто зайдите, добавив постоянные параметры хранилища в код и новую версию модели в Xcode.

При настройке основного стека данных - то есть после того, как документ с БД был выбран - вы должны добавить эти параметры в постоянной памяти при создании постоянного хранилища координатор:

NSString * const NSMigratePersistentStoresAutomaticallyOption; 
NSString * const NSInferMappingModelAutomaticallyOption; 

Как имена из этих вариантов подразумевается, он должен работать автоматически отсюда. Фактический вызов будет выглядеть примерно так:

[persistentStoreCoordinator 
    addPersistentStoreWithType:NSSQLiteStoreType 
    configuration:@"Default" 
    URL:fileURL 
    options:@{NSMigratePersistentStoresAutomaticallyOption : @(YES), 
      NSInferMappingModelAutomaticallyOption  : @(YES)} 
    error:&error]; 
+0

извините за поздний ответ .. этот код нужно прорисовывать в файле document.m или в файле appdelegate.m? я предполагаю, что в doucment.m, поскольку он должен быть выполнен для каждого файла, который в конечном итоге загружен. правильно? – sharkyenergy

+0

Справа. Если это ваша настройка, т. Е. Создание новой базы данных SQLite для каждого нового документа, почему бы и нет? Обычный способ заключается в том, чтобы полностью скрыть документ и просто использовать его в делегате приложения для обертывания базы данных sqlite и хранить все («все документы»). Но вы, похоже, намерены сделать что-то еще с вашей настройкой. – Mundi

+0

Да, мое приложение использует файл базы данных. он должен быть таким, потому что пользователи могут помещать эти файлы в USB-накопитель и перемещать их на рабочий компьютер, например. Попробуй и ответь! благодаря! – sharkyenergy

Смежные вопросы