Загрузка данных в схему основных данных - PullRequest
7 голосов
/ 30 июня 2009

Я реализую приложение на основе навигации. Пользователь детализируется до интересующего узла. Я использую Core Data, в основном потому, что хочу попробовать. Как загрузить базу данных изначально? Должен ли я написать собственный код, который загружает базу данных изначально, или есть какой-то инструмент, который сделает это для меня?

Ответы [ 3 ]

17 голосов
/ 26 июля 2010

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

Создать список свойств, содержащий массив словарей. Приведите ключи каждого словаря в соответствие с ключами вашего управляемого объекта.

альтернативный текст http://www.freeimagehosting.net/uploads/b0b1909e81.png

Затем вызовите этот метод при первом запуске приложения:

- (void)loadDataFromPropertyList {
    NSString *path = [[NSBundle mainBundle] pathForResource:@"someFile" ofType:@"plist"];
    NSArray *items = [NSArray arrayWithContentsOfFile:path];

    NSManagedObjectContext *ctx = self.managedObjectContext;

    for (NSDictionary *dict in items) {
        NSManagedObject *m = [NSEntityDescription insertNewObjectForEntityForName:@"TheNameOfYourEntity" inManagedObjectContext:ctx];
        [m setValuesForKeysWithDictionary:dict];
    }

    NSError *err = nil;
    [ctx save:&err];

    if (err != nil) {
        NSLog(@"error saving managed object context: %@", err);
    }
}

Позвоните loadDataFromPropertyList при первом запуске приложения, включив следующий код в реализацию application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];  
if (![defaults objectForKey:@"firstRun"])
{
    [defaults setObject:[NSDate date] forKey:@"firstRun"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    [self loadDataFromPropertyList];
}
3 голосов
/ 30 июня 2009

Не существует автоматического (то есть встроенного) метода для импорта данных в контекст базовых данных.

Я подозреваю, что это потому, что Core Data на самом деле является структурой управления графами объектов (которая может сохранять этот граф объектов на диске), и отображение между экземплярами данных и объектов зависит от схемы (и поэтому потребует хоть какой-то код).

Если у вас уже есть данные в другом формате, вам следует прочитать раздел Руководства по программированию базовых данных по импорту данных в контекст базовых данных . Если у вас еще нет данных в другом формате, вам придется написать код в любом случае (для создания промежуточного формата или для непосредственного заполнения контекста).

Наконец, хотя это и не публичный API, формат Core Data XML довольно прост в работе с ним вручную или с использованием любого количества инструментов на основе XML. В зависимости от сложности ваших данных, вы можете изменить схему XML настолько, чтобы создать постоянное хранилище на основе XML. Затем вы можете перенести это хранилище в постоянное хранилище SQLite, и вы уже в пути.

0 голосов
/ 30 июня 2009

На данный момент, насколько я знаю, вы должны написать собственный код для заполнения базы данных.

Это выглядит как недостаток, я бы очень хотел увидеть инструмент для предварительной загрузки в пакет (оболочку) источников данных, предназначенный для использования CoreData.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...