2016-09-16 14 views
0

我有一個動態的tableview,可以通過搜索框搜索,如果我加載在背景中的單元格中的圖像和搜索文本更改,單元格中的對象也可能會更改,有時在後臺加載的舊圖像會在不應該時完成並顯示。並不是每一個圖像加載以同樣的方式,但是這是導致問題的方法:可重複使用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]; 
            }]; 
           }]; 

任何想法,將不勝感激

+0

在您的完成塊中,確保您是從主線程調用的。 (你可以設置一個斷點來確定這一點)。如果您從後臺線程調用,則需要將代碼包裝在dispatch_async(dispatch_get_main_queue())中,...)以在主線程上分派UI代碼。 – TyR

回答

1

你需要在這裏做兩件事情

1)在prepareforresue方法集圖像零

希望prepareforresue方法取消當前的下載請求

2),這將解決您的問題

0

這裏的問題是,你已經重新使用單元格後,圖像從URL加載。您可以存儲圖像的URL,每次重複使用單元格時,圖像的url都應該存儲在自定義單元類中。然後在完成區塊內,使用isEqual:方法NSURL檢查加載的圖像url和存儲的圖像url是否相同。如果它們相同,那麼一切正常,單元格不被重用,否則單元格被用於另一行,然後只是不設置圖像。

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