[英]How Can I Save & Retrieve an image (bytes) to SQLite (blob) using FMDB?
我正在制作一個需要從遠程站點(從URL)顯示一些圖像的iOS應用程序,每當用戶進入應該顯示圖像的屏幕時,應用程序就會凍結,直到下載完成。 所以我想將已下載的圖像存儲到名為COVERS的SQLite表中。
這是我如何下載和顯示圖像的代碼:
假設movieCover是一個UIImageView ,對象影片有一個名為cover的NSURL屬性,它包含要下載的圖像的URL。
NSData *cover = [[NSData alloc] initWithContentsOfURL:movie.cover];
movieCover.image = [[UIImage alloc] initWithData:cover];
但是,我想把它改成這樣的東西:
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];
假設appDelegate是當前ViewController的屬性,而dataBase是AppDelegate的一個屬性,它使用FMDB來操縱DataBase中的數據。
我需要使用以下方法獲取以前保存在數據庫中的封面:
- (NSData *)getCoverForMovie:(Movie *)movie;
但是,如果沒有保存封面,則返回nil。
所以我需要使用該方法保存封面
- (BOOL)saveCover:(NSData *)cover ForMovie:(Movie *)movie;
但我不知道如何編寫這種方法。 需要一些幫助。
- (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的回答。
查看FMDB發行版中的main.m-它顯示了如何保存和拉出二進制blob(以safari圖標為例)“。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.