0

私のアプリでは、UITableViewCellsの画像を次のように非同期で読み込んでいます。

-(void) loadImage:(NSString *)urlString cell:(UITableViewCell *)cell {
    UIImageView *iv = cell.imageView;

    UIImage *image = [imageCache objectForKey:urlString];
    if(!image) {

        NSURL *url = [NSURL URLWithString:urlString];

        image = [UIImage imageWithData: [NSData dataWithContentsOfURL:url]];
        if(image) {
            [imageCache setObject:image forKey:urlString];
        }
    }

    dispatch_async(dispatch_get_main_queue(), ^{
        iv.image = image;
        [cell addSubview:iv];
    });
}

すべてのイメージのロードが完了する前にテーブルビューが更新されると、iv.image = image;ivの割り当てが解除されたため、例外がスローされます。割り当て解除されたセルの画像を設定しようとしないようにするための最良の方法は何ですか?テーブルビューがリロードされたときに、長引く非同期ロードを強制終了する方法はありますか?

4

1 に答える 1

1

私はこれを別の方法で実装します。セルを作成するときは、キャッシュから画像を取得してみてください。イメージが見つからない場合は、非同期ダウンロードをトリガーし、イメージがダウンロードされたことをセルまたはコントローラーに (メイン スレッドから) 通知します。KVO を使用して、セルを画像キャッシュに接続できます。

于 2012-10-09T19:29:26.740 に答える