ios无法显示数据库中的图像

标签 ios arrays sqlite

大家好,我正在创建一个从数据库中获取图像并将其存储在数组中的程序。但在将它们存储在数组中后,我无法显示它们。出现异常,当我用断点检查它时,它在一行中给了我异常,这是我的代码和那一行,

 data=[MyDatabase new];
    slideImages=[data OpenMyDatabase:@"SELECT pic_name FROM exterior":@"pic_name"];
    [self putImageViewsInScrollView:slideImages.count];
       self.FullScreenImageScroller.delegate=self;



}


-(void) putImageViewsInScrollView:(int)numberOfImageViews
{

     for(int i=0 ;i< numberOfImageViews; i++)
    {

        UIImageView *fullScreenImageView=[[UIImageView alloc]initWithImage:[UIImage imageNamed:[slideImages objectAtIndex:i]]];
        fullScreenImageView.frame = CGRectMake((WIDTH_OF_IMAGE * i)  , 0, WIDTH_OF_IMAGE, HEIGHT_OF_IMAGE);
        fullScreenImageView.image= [UIImage imageNamed:[slideImages objectAtIndex:i]];
        [self.FullScreenImageScroller addSubview:fullScreenImageView];
    }

    [self.FullScreenImageScroller setContentSize:CGSizeMake(WIDTH_OF_SCROLL_PAGE * ([slideImages count]), HEIGHT_OF_IMAGE)];
    [self.FullScreenImageScroller setContentOffset:CGPointMake(0, 0)];
    [self.FullScreenImageScroller scrollRectToVisible:CGRectMake(WIDTH_OF_IMAGE,0,WIDTH_OF_IMAGE,HEIGHT_OF_IMAGE) animated:NO];

}

这里是断点给出异常的代码行,

UIImageView *fullScreenImageView=[[UIImageView alloc]initWithImage:[UIImage imageNamed:[slideImages objectAtIndex:i]]];

我现在该怎么办,请帮忙提前谢谢...

最佳答案

图像存储在数据库中的 NSData 而不是 UIImage 因此您将 NSData 放入数据库并获取 NSData从数据库中获取图像并从此 NSData...并将图像存储在数据库中不是一个好概念...将图像保存在文件夹中并将图像路径保存在数据库中...并从中获取图像显示路径....

如果您将 NSData 存储在数据库中,则通过以下代码从这行代码中获取图像

UIImage *image = [UIImage imageWithData:(NSData *)];

否则,如果你想在你的文档文件夹中使用此图像,请使用此代码

在应用程序中保存图片

-(void) saveImage:(UIImage *)image withFileName:(NSString *)imageName ofType:(NSString *)extension inDirectory:(NSString *)directoryPath {
    if ([[extension lowercaseString] isEqualToString:@"png"]) {
        [UIImagePNGRepresentation(image) writeToFile:[directoryPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@", imageName, @"png"]] options:NSAtomicWrite error:nil];
    } else if ([[extension lowercaseString] isEqualToString:@"jpg"] || [[extension lowercaseString] isEqualToString:@"jpeg"]) {
        [UIImageJPEGRepresentation(image, 1.0) writeToFile:[directoryPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.%@", imageName, @"jpg"]] options:NSAtomicWrite error:nil];
    } else {
        ALog(@"Image Save Failed\nExtension: (%@) is not recognized, use (PNG/JPG)", extension);
    }
}

and save this image path in database 

首先从数据库中获取这条路径,然后使用这段代码

从网址获取图片

-(UIImage *) getImageFromURL:(NSString *)fileURL {
    UIImage * result;

    NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:fileURL]];
    result = [UIImage imageWithData:data];

    return result;
}

将图像插入到 SQLite 中:

sqlite3_bind_blob(compiledStatement,i, [image_data bytes], [image_data length], SQLITE_TRANSIENT);

并从 SQLite 中获取图像:

NSData *dataForCachedImage = [[NSData alloc] initWithBytes:sqlite3_column_blob(compiledStatement, i) length: sqlite3_column_bytes(compiledStatement, i)];           
UIImage *img = [UIImage imageWithData:dataForCachedImage];

关于ios无法显示数据库中的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15216690/

相关文章:

ios - 如何以编程方式更改文本字段字体大小?

javascript - 在Javascript中使用reduce对空数组和非空数组求和

ios - 在不重启应用程序的情况下更改 iOS 中的应用程序语言

ios - 无法重新启用我的应用中的位置

arrays - ARRAY公式EXCEL中的多条件IF语句

arrays - PostgreSQL 函数如何接受同一函数的整数或整数数组?

java - 无法在android上的sqlite数据库中创建表

mysql - 在 RoR 模式中添加主键约束

Sqlite 到 Postgres (Heroku) 日期/时间

ios - 为什么我不能在函数更新中调用函数?