0

UITableView画像付きのセルを表示する があります。メソッドで、cellForRowAtIndexPath接続を開始して画像をフェッチします。同じ画像を複数回リクエストすることを避けるために、どの画像がすでにリクエストされているかを追跡したいと考えています。

私はこのような方法を設定しました

+(void) setImageFromURL:(NSURL*) url fromImage:(UIImage*) srcImage to:(UIImageView*) dstImage wasRequested:(BOOL*) requested;

そしてそれをこのように呼びます

[Utils setImageFromURL:event.thumbURL fromImage:event.thumbImage to:cell.image wasRequested:event.thumbRequested];

ここで、event.thumbRequested は BOOL プロパティです。メソッドは次のようになります

+(void) setImageFromURL:(NSURL*) url fromImage:(UIImage*) srcImage to:(UIImageView*) dstImage wasRequested:(BOOL*) requested{
    if (srcImage != nil) {
        dstImage.image = srcImage;
    } else if (!requested) {
        requested = YES;
        @try {
            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
                NSData * data = [[NSData alloc] initWithContentsOfURL: url];
                if ( data == nil )
                    return;
                dispatch_async(dispatch_get_main_queue(), ^{
                    __block UIImage* srcImage = [UIImage imageWithData: data];
                    dstImage.image = srcImage;
                });
                [data release];
            });
        }
        @catch (NSException *exception) {
            NSLog(exception.debugDescription);
        }
    }
}

私の問題は、 のBOOL値渡し動作のために が変化しないことObjective-Cです。BOOLメソッド内からイベント オブジェクト内を更新できる方法を推奨できる人はいますか?

4

1 に答える 1

6

この線:

requested = YES;

する必要があります:

if (requested) {
    *requested = YES;
}

このチェックはnil、 for が渡された場合にのみ行われrequestedます。

編集:呼び出しは次のようになります。

BOOL requested = event.thumbRequested;
[Utils setImageFromURL:event.thumbURL fromImage:event.thumbImage to:cell.image wasRequested:&requested];
event.thumbRequested = requested;
于 2012-10-31T05:30:47.673 に答える