Основные данные: предварительно заполнить сущность SQLite изображением - PullRequest
0 голосов
/ 06 июля 2011

Я уже предварительно заполняю данные для своего приложения, сначала создав базу данных с помощью основных данных, а затем заполнив этот инициализированный файл с помощью SQLite Manager. Можно ли предварительно заполнить изображения в таблице SQLite для использования в основных данных?

Моя первоначальная мысль - вставить изображения в виде больших двоичных объектов через SQLite Manager. Затем, основываясь на этом post , похоже, что мне нужно установить тип на двоичный и импортировать с помощью UIImage initWithData:.

Это выполнимо, и если да, то это подходящий метод?

Ответы [ 2 ]

2 голосов
/ 13 июля 2011

Предварительное заполнение изображений в базе данных SQLite для использования с Core Data оказывается довольно тривиальным.

  1. Сначала сконфигурируйте свое приложение Core Data, реализуя свой атрибут, содержащий изображения в виде «Binary»тип.Создайте приложение и перейдите к своему представлению, используя Core Data в симуляторе приложения.Это инициализирует базу данных SQLite в соответствии с требованиями для использования с Core Data (при условии, что вы реализовали persistentStoreCoordinator следующим образом).
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
    if (persistentStoreCoordinator != nil) {
        return persistentStoreCoordinator;
    }
    NSString *storePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"YourDBName.sqlite"];

    // Set up the store.
    // For the sake of illustration, provide a pre-populated default store.

    NSFileManager *fileManager = [NSFileManager defaultManager];
    // If the expected store doesn’t exist, copy the default store.
    if (![fileManager fileExistsAtPath:storePath]) {
        NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"YourDBName" ofType:@"sqlite"];
        if (defaultStorePath) {
            [fileManager copyItemAtPath:defaultStorePath toPath:storePath error:NULL];
        }
    }

    NSURL *storeUrl = [NSURL fileURLWithPath:storePath];
    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                             [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, 
                             [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, 
                             nil];
    persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];

    NSError *error;
    if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {
        // Update to handle the error appropriately.
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        exit(-1);  // Fail
    }
    return persistentStoreCoordinator;
}
  1. Перейдите к данным приложения в "Пользователи // Библиотека / Поддержка приложений / iPhone Simulator / Пользователь / Приложения / ".Если вы отсортируете папку по «Дата изменения», у вашего приложения будет самая последняя дата (при условии, что вы не создавали другие приложения за это время).Войдите в папку приложения, и инициализированный будет находиться в папке «Документы».Скопируйте базу данных SQLite в другое место (например, на рабочий стол) и удалите исходный файл (это необходимо для того, чтобы Core Data перезагрузил предварительно заполненную базу данных SQLite, которую вы собираетесь создать).

  2. Откройте в своем любимом редакторе SQLite (плагин SQLite Manager для Firefox является адекватной и бесплатной опцией).Добавьте записи в свою таблицу, вставив любые изображения в виде «BLOB».

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

  4. Доступ к вашей предварительнойзаполненные изображения в вашем коде с [UIImage imageWithData:< DataObject >.< ImageAttributeName >

1 голос
/ 06 июля 2011

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

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

...