2015-12-03 163 views
4

我正在使用SDWebImage庫來處理圖像緩存。我實現了其中一種方法從服務器下載圖像並在tableView中填充數據。這裏是我的下載圖像和tableViewCell 顯示cellForRowAtIndexPath代碼,我做了下面的代碼SDWebImage不更新緩存中的圖像

[cell.profileImageView sd_setImageWithURL:[NSURL URLWithString:url] placeholderImage:nil options:SDWebImageRefreshCached]; 

它完美地在這裏。但是當我在服務器上更新映像時,tableViewCell仍然顯示相同的圖像。問題是,它的緩存沒有更新映像。我搜索了相同的關鍵字,並且在StackOverflow上遇到了this問題。但無法解決問題。我也試着清除viewDidDisappear

-(void)viewDidDisappear:(BOOL)animated 
{ 
    [super viewDidDisappear:YES]; 
    [[SDImageCache sharedImageCache]clearMemory]; 
    [[SDImageCache sharedImageCache]clearDisk]; 
} 

但它不是有效的方式內存和緩存。當服務器上的映像更新時,是否有任何其他方式來更新緩存?

+0

你有什麼辦法知道圖像是否已更新? – ShahiM

+0

嘗試使用此 ** [[SDImageCache sharedImageCache] imageCache clearMemory]; ** ** [[SDImageCache sharedImageCache] imageCache clearDisk]; ** –

+0

@EktaMakadiya,清除緩存每次都會從服務器重新載入數據。它忽略了SDWebImage的使用。 –

回答

2

您可以使用SDWebImageRefreshCached選項刷新具體圖像,但是您永遠不知道圖像是否在服務器端更改過。因此,只有您決定是否使用圖像緩存以及何時更新緩存。

+0

我在下載圖片時已經在選項中使用了'SDWebImageRefreshCached'。但仍顯示出舊的形象。 –

+0

SDWebImageRefreshCached不會忽略您的緩存,它只會繼續緩存控制http頭。所以服務器端設置可以控制你自己的緩存生命。您應該與服務器管理員溝通以討論此行爲 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9 – Igor

+0

謝謝。我會試着討論。 –

1

SDWebImagedocs

如果你不控制你正在使用的圖像服務器,您可能無法更改URL時,它的內容更新。在這種情況下,您可以使用SDWebImageRefreshCached標誌。這將略微降低性能,但會尊重HTTP緩存控制頭

[imageView sd_setImageWithURL:url 
      placeholderImage:[UIImage imageNamed:@"placeholder.png"] 
         options:SDWebImageRefreshCached]; 

如果你使用這個在所有的代碼它會破壞圖像緩存的目的。每次都會下載圖像。相反,您可以:

  1. 如果您管理服務器,則可以在數據庫中設置一些標誌以指示映像在服務器上已更改。
  2. 實施一些邏輯,只在兩天內使用SDWebImageRefreshCached或類似的東西,並在其他時間使用正常的代碼。

如果可行,您也可以稍後清除整個緩存以強制刷新。

+0

清除整個緩存並不可行。它忽略了SDWebImage的使用。並且由於我添加了代碼以從服務器下載圖像,因此它在選項中包含「SDWebImageRefreshCached」。但每次都會顯示舊圖像。 –

+0

您是否嘗試過在瀏覽器中調用該網址並確保圖片實際上已更改? – ShahiM

+0

是的,它試圖調用它。也在我的應用程序的其他地方,我從服務器下載相同的圖像,而不使用SDWebImage。圖像在那裏更新。 –