0

皆さん、データベースから画像を取得して配列に格納するプログラムを作成しています。しかし、それらを配列に保存した後、それらを表示できません。例外が発生し、ブレークポイントでチェックすると、ある行で例外が発生しました。これが私のコードとその行です。

 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]]];

私は今何をすべきですか、事前に感謝します...

4

3 に答える 3

1

画像はUIImageではなくNSDataのデータベースに保存されるため、NSDataデータベースに配置し、データベースからNSDataをフェッチして、このNSDataから画像を取得します...そしてdatabseに画像を保存するのは良い概念ではありません...画像をドキュメントフォルダに保存してパスを保存しますデータベース内の画像の...そしてこのパスから画像を取得して表示します...

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 

最初にdatabseからこのパスを作成し、次にこのコードを使用します

URLから画像を取得

-(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];
于 2013-03-05T05:49:51.703 に答える
1

私はあなたが保持していないと思いますslideImages。正しいUIImageオブジェクトを設定している場合は、配列を保持しますslideImages

于 2013-03-05T05:50:56.653 に答える
0

NSData 型を slideImages に格納すると仮定します。この場合、[UIImage imageWithData:(NSData *)]画像オブジェクトの初期化に使用する必要があります。

于 2013-03-05T05:53:01.023 に答える