Я пытаюсь загрузить изображения png в UIImage из базы данных SQlite.Изображения хранятся в виде двоичных файлов в столбце BLOB-объектов.Я создал двоичные файлы с использованием PHP fread, поэтому я думаю, что мой первый вопрос: это форма вывода, которую сможет использовать цель c?Если это не вызывает проблем, то где-то в моем объектном коде c должна быть ошибка.
Вот как я загружаю данные:
NSData *data = [[NSData alloc] initWithBytes:sqlite3_column_blob(selStmt, 2) length:sqlite3_column_bytes(selStmt, 2)];
Когда я NSLog данных, яЯ могу видеть числа (длинный список) для 7 изображений, которые у меня есть в настоящее время.Я предполагаю, что получаю данные из столбца.
Странно то, что когда я отправляю эти данные в UIImage, я получаю нули:
item.archThumb = [UIImage imageWithData:data];
или
UIImage *theimage = [[UIImage alloc]init];
theimage =[UIImage imageWithData:data];
Мой второй вопрос: я пропустил дополнительный шаг?
Вот метод, который я использую для чтения элементов из базы данных:
-(void)readItems{
if (!database) return; // earlier problems
// build select statement
if (!selStmt)
{
const char *sql = "SELECT items.arch_id, items.arch_name, arch_thumbs.thumbs_image FROM items LEFT JOIN arch_thumbs ON items.arch_id = arch_thumbs.thumbs_arch_id ORDER BY items.arch_name ASC;";
if (sqlite3_prepare_v2(database, sql, -1, &selStmt, NULL) != SQLITE_OK)
{
selStmt = nil;
}
}
if (!selStmt)
{
NSAssert1(0, @"Can't build SQL to read items [%s]", sqlite3_errmsg(database));
}
// loop reading items from list
int ret;
while ((ret=sqlite3_step(selStmt))==SQLITE_ROW)
{ // get the fields from the record set and assign to item
// primary key
NSInteger n = sqlite3_column_int(selStmt, 0);
Item *item = [[Item alloc] initWithPrimaryKey:n]; // create item
// item name
char *s = (char *)sqlite3_column_text(selStmt, 1);
if (s==NULL) s = "";
item.name = [NSString stringWithUTF8String:(char *)s];
NSData *data = [[NSData alloc] initWithBytes:sqlite3_column_blob(selStmt, 2) length:sqlite3_column_bytes(selStmt, 2)];
if (sqlite3_column_blob(selStmt, 2) != NULL) {
item.archThumb = [UIImage imageWithData:data];
NSLog(@"the image is:%@", item.archThumb);
}
else{
NSLog(@"read a NULL image");
}
[items addObject:item]; // add to list
[item release]; // free item
[data release];
}
sqlite3_reset(selStmt); // reset (unbind) statement
}