SDWebImage未在缓存中更新图像

5
我正在使用 SDWebImage 库来处理图像缓存。我实现了其中一个方法来从服务器下载图像并在 tableView 中填充数据。以下是我的代码,用于下载图像并在 tableViewCell 中显示。 在 cellForRowAtIndexPath 中,我执行了以下代码。
[cell.profileImageView sd_setImageWithURL:[NSURL URLWithString:url] placeholderImage:nil options:SDWebImageRefreshCached];

这里一切都运行得很完美。但当我在服务器上更新图像时,tableViewCell 仍然显示相同的图像。问题在于,它的缓存没有更新图像。我使用相同的关键词进行搜索,并遇到了 StackOverflow 上的 这个 问题。但是无法解决这个问题。我还尝试在 viewDidDisappear 上清除内存和缓存。
-(void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:YES];
    [[SDImageCache sharedImageCache]clearMemory];
    [[SDImageCache sharedImageCache]clearDisk];
}

但这并不是一种有效的方法。是否还有其他的方法来在服务器上的图像更新时更新缓存?


你有什么办法知道图片是否已经更新了吗? - ShahiM
尝试使用以下代码: [[SDImageCache sharedImageCache]imageCache clearMemory]; [[SDImageCache sharedImageCache]imageCache clearDisk]; - Ekta Padaliya
@EktaMakadiya,清除缓存将会每次从服务器重新加载数据。它会忽略使用SDWebImage的情况。 - Sushil Sharma
如果您的URL是静态的,那么请不要缓存图像。每次重新加载图像。因为缓存的意思是将图像存储以备将来使用。 - Ekta Padaliya
2个回答

3

您可以使用SDWebImageRefreshCached选项来刷新具体的图像,但是您无法确定服务器端是否更改了该图像。因此,是否使用图像缓存以及何时更新缓存只取决于您自己。


我在下载图片时已经使用了 SDWebImageRefreshCached 选项,但仍然显示旧图片。 - Sushil Sharma
SDWebImageRefreshCached不会忽略您的缓存,它只会处理Cache-Control HTTP头。因此,服务器端设置可以控制缓存生命周期本身。您应该与服务器管理员沟通讨论此行为。 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9 - Igor
谢谢。我会尝试讨论。 - Sushil Sharma

2

来自SDWebImage 文档

如果您无法控制所使用的图像服务器,当其内容更新时可能无法更改URL。在这种情况下,您可以使用SDWebImageRefreshCached标志。这会略微降低性能,但会尊重HTTP缓存控制头。

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

如果您在所有代码中都使用它,那么这将违背“图像缓存”的目的。因为每次都会下载图片。相反,您可以:
  1. 如果您管理服务器,则可以在DB中设置一些标志,指示图片在服务器上已更改。
  2. 实现一些逻辑,仅在2天内使用SDWebImageRefreshCached一次或类似的时间,并在其他时间使用正常代码。

如果可行,您还可以定期清除整个缓存以强制刷新。


清除整个缓存不可行。这会忽略SDWebImage的使用。由于我已经添加了从服务器下载图像的代码,因此在选项中包括'SDWebImageRefreshCached'。但每次都显示旧图像。 - Sushil Sharma
你尝试在浏览器中调用该URL并确保图像实际上已更改了吗? - ShahiM
是的,我试着调用它了。此外,在我的应用程序的其他地方,我正在从服务器下载相同的图像,而不使用SDWebImage。图像在那里更新。 - Sushil Sharma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接