Вопрос по objective-c, fmdb, sqlite, ios – Как я могу сохранить и извлечь изображение (байты) в SQLite (blob) с помощью FMDB?

3

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

Вот код, который я загружаю и показываю на картинке:

Предположим, что movieCover являетсяUIImageView и объект фильма имеетNSURL Свойство с именем cover, которое содержит URL-адрес изображения для загрузки.

<code>NSData *cover = [[NSData alloc] initWithContentsOfURL:movie.cover];
movieCover.image = [[UIImage alloc] initWithData:cover];
</code>

Но я хочу изменить это на что-то вроде этого:

<code>NSData *cover = [appDelegate.dataBase getCoverForMovie:movie];
if( !cover ) {
    cover = [[NSData alloc] initWithContentsOfURL:movie.cover];
    [appDelegate.dataBase setCover:cover ToMovie:movie];
}

movieCover.image = [[UIImage alloc] initWithData:cover];
</code>

Предположим, что appDelegate является свойством текущего ViewController, а dataBase - это свойство AppDelegate, которое использует FMDB для манипулирования данными в базе данных.

Мне нужно получить обложку, ранее сохраненную в базе данных, используя метод:

<code>- (NSData *)getCoverForMovie:(Movie *)movie;
</code>

Но, если обложка не сохранена, верните ноль.

Поэтому мне нужно сохранить обложку, используя метод

<code>- (BOOL)saveCover:(NSData *)cover ForMovie:(Movie *)movie;
</code>

Но я не знаю, как кодировать этот метод. Нужна помощь с этим.

@ St & # xE9; phaneBruckert сделано. Спасибо за ваше предложение. Alberto Estrella
Пожалуйста, перенесите ваш ответ с вашего вопроса на фактический ответ, иначе я не смог бы дать вам +1. Вопрос - это вопрос, а ответ - это ответ. Stéphane Bruckert

Ваш Ответ

2   ответа
2

Methods Implementations based on fmdb.m examples

- (NSData *)getCoverForMovie:(Movie *)movie
{
    NSData *cover = nil;

    FMDatabase *db = [FMDatabase databaseWithPath:databasePath];

    [db open];
    FMResultSet *results = [db executeQueryWithFormat:@"SELECT * FROM COVERS WHERE movie = %i", movie.movieID];

    if([results next])
    {
        cover = [results dataForColumn:@"cover"];
    }

    return cover;
}


- (BOOL)saveCover:(NSData *)cover ForMovie:(Movie *)movie
{
    BOOL result;

    FMDatabase *db = [FMDatabase databaseWithPath:databasePath];

    [db open];

    result = [db executeUpdate:@"INSERT OR REPLACE INTO COVERS (movie, cover) VALUES (?,?)", movie.movieID, cover];

    return result;
}

Спасибо @ccgus за ответ.

0

Проверьте main.m в дистрибутиве FMDB - он показывает, как сохранить и извлечь двоичный двоичный объект (на примере значка safari) & quot ;.

Спасибо за вашу ссылку ccgus. Я проверил fmdb.m, в котором есть все примеры, необходимые для завершения моих методов. Я отредактирую Вопрос, чтобы привести пример, который может быть полезен для человека с таким же вопросом. Ах! и спасибо за FMDB :) Это отличный Wrapper. Alberto Estrella

Похожие вопросы