2013-08-31 19 views
0

我的表視圖通過每個tableView:cellForIndexPath:中的SDWebImage(UIImageView的異步圖像下載/緩存類別)加載圖片。爲什麼nil-checking表格視圖單元格屬性會導致我的單元格之一複製另一個單元格?

           // 'spot' is a dictionary of this cell's attributes 
NSURL* imageURL = [NSURL URLWithString:(NSString*)[spot objectForKey:@"Image"]]; 
UIImage* placeholderImage = [UIImage imageNamed:@"placeholder.png"]; 

^加載圖像,但不斷地從緩存中發出請求或拉出。所以我想看看呈現的單元格是否存儲在內存中,所以我只能在需要時提出圖像請求。我通過添加一個簡單的檢查圖像視圖的圖像屬性來解決這個問題。

if (!cell.pictureView.image) 
{ 
    NSURL* imageURL = [NSURL URLWithString:(NSString*)[spot objectForKey:@"Image"]]; 
    UIImage* placeholderImage = [UIImage imageNamed:@"placeholder.png"]; 

    [cell.pictureView setImageWithURL:imageURL placeholderImage:placeholderImage options:SDWebImageCacheMemoryOnly]; 
} 

這樣做的作用,並保持我的圖像不必在退出和重新進入應用程序後重新加載。但是在我的一個單元格中有一個故意圖像url(用於調試),圖像 - 曾經保留爲imageNamed:@"placeholder" - 現在與我的第二個單元格相同。

我很好奇什麼樣的細胞重複使用/緩存魔法導致細胞拍攝前一個細胞的圖片。

什麼是保留單元格屬性的最佳方法,只在需要時設置它們?

回答

0

這很可能是您使用的圖像包的問題。如果您正在重複URL請求以獲取圖像,那麼實施NSURLCache可能是最佳做法,它非常簡單並且完美地處理緩存,所以它不是問題。其他解決方案傾向於這些類型的問題。由於它是UIImageView中的一個類別,因此在使用單元格時,UIImageView的實現可能會導致任何問題。

相關問題