2016-09-16 8 views
0

私は検索ボックスで検索できる動的なテーブルビューを持っています。また、バックグラウンドのセルに画像を読み込んで検索テキストが変化すると、セル内のオブジェクトも変化することがありますバックグラウンドで読み込まれていた古いイメージは、終了してはならないときに表示されることがあります。必ずしもすべての画像を同じようにロードされたが、これが問題となる方法である:再利用可能なTableViewCellは古い画像をロードします

[self.CarImage sd_setImageWithURL:imageURL 
           completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageurl){ 
            [self.CarImage setAlpha:0.0]; 
            [UIImageView animateWithDuration:.5 animations:^{ 
             [self.CarImage setAlpha:1.0]; 
            }]; 
           }]; 

任意のアイデアに)​​あなたがここに二つのこと

1を実行する必要があり

+0

完了ブロックで、メインスレッドから呼び出していることを確認してください。 (これを決めるためにブレークポイントを設定することができます)。バックグラウンドスレッドから呼び出されている場合は、メインスレッドにUIコードをディスパッチするために、dispatch_async(dispatch_get_main_queue())、...)内にコードをラップする必要があります。 – TyR

答えて

1

をいただければ幸いですnilの

希望にprepareforresue方法セット画像でprepareforresue方法キャンセル現在のダウンロード要求

2)これはあなたの問題を解決します

0

ここで問題は、イメージが既にセルを再利用した後にURLから読み込まれることです。画像のURLを保存することができます。再利用されるセルのたびに、画像のURLをカスタムセルクラス内に保存する必要があります。次に、完了ブロック内で、のisEqual:メソッドを使用して、ロードされたイメージURLと保存されたイメージURLが同じかどうかを確認します。それらが同じであればすべてがOKです、セルは再利用されていません。そうでなければ、セルは別の行に使用されています。

self.carImgUrl = imageURL;//here carImgUrl is a property which you gonna set everytime when the cell is being reused. 
[self.CarImage sd_setImageWithURL:imageURL 
          completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageurl){ 
           if([imageurl isEqual:self.carImgUrl]) 
           { 
            [self.CarImage setAlpha:0.0]; 
            [UIImageView animateWithDuration:.5 animations:^{ 
             [self.CarImage setAlpha:1.0]; 
            }]; 
           } 
          }]; 
関連する問題