Предварительная загрузка таблицы основных данных со значениями по умолчанию - PullRequest
1 голос
/ 21 мая 2011

У меня есть приложение с основными данными OSX (не на основе документов) с несколькими таблицами. Я хотел бы отправить свое приложение только с одной из этих таблиц, предварительно загруженной несколькими сотнями записей. Пользователь также сможет добавить больше записей в предварительно заполненную таблицу.

Как лучше всего отправить мое приложение с одной из предварительно заполненных таблиц? Я видел похожие ответы для iOS, но я на OSX, который, кажется, не использует sqlite для основных данных.

В будущих версиях приложения может потребоваться обновить эту таблицу, не стирая ни одной из пользовательских записей, созданных в текущей версии.

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 19 января 2012

У меня тоже есть ответ, я не говорю, что Джошуа не прав.<- Хе-хе ... двойной отрицательный. </p>

Мне совсем недавно пришлось это сделать, и правильный подход действительно зависит от того, сколько данных вы хотите предварительно загрузить?

A) Если этомного, тогда да, добавьте предварительно заполненное хранилище и загрузите его в начале

B) Если это не так, просто добавьте данные через код вручную

Оба имеют Pro и Con.Самая большая проблема с А) заключается в том, что когда вы собираетесь обновить свою модель, вам придется заново заполнить новый шаблон.Для меня это может быть административным кошмаром.

Итак, следующая вещь, которую вы можете задаться вопросом, это как определить, когда делать A) или B)?Ответ находится в метаданных постоянного хранилища.У вас действительно должен быть только один магазин, поэтому давайте предположим, что это так.Я просто получаю метаданные для «хранилища», и если мой объект dict не возвращает YES, то заполняю мою таблицу.Если сохранение выполнено успешно, обновите метаданные «хранилища», указав значение NSNumber BOOL YES.

Я рекомендую использовать методы класса для NSPersistentStoreCoordinator.Таким образом, вам не требуется выполнять другое сохранение в вашем контексте.

Код:

#pragma mark - Core Data Meta Data:

- (NSDictionary *) persistentStoreMetaData {

    if ( ![_coreDataStore isExists] )
        return [NSDictionary dictionary];

    NSError * error = nil;
    NSDictionary * dict = [NSPersistentStoreCoordinator metadataForPersistentStoreOfType:NSSQLiteStoreType 
                                                                                     URL:_coreDataStore 
                                                                                   error:&error];
    if ( error ) {
        REPORT( errReportErrErrorStoreMetaDataGet );
        return [NSDictionary dictionary];
    }

    return dict;
}

- (void) setPersistentStoreMetaData:(NSDictionary *)metaData {

    if ( ![_coreDataStore isExists] ) return;

    NSError * error = nil;
    [NSPersistentStoreCoordinator setMetadata:metaData 
                     forPersistentStoreOfType:NSSQLiteStoreType 
                                          URL:_coreDataStore 
                                        error:&error];
    if ( error ) 
        REPORT( errReportErrErrorStoreMetaDataSave );
}
0 голосов
/ 21 мая 2011

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

...