1

我正在使用 Kingfisher 使用来自 Url 的图像加载图像视图。有时,相同的 url 会更新为新图像。所以我使用下面的代码来加载图像视图,

profileImage.kf.setImage(with: profileUrl, placeholder: #imageLiteral(resourceName: "profile_1"), options: [.fromMemoryCacheOrRefresh], progressBlock: nil, completionHandler: nil)

但是图像没有得到更新。只显示旧图像。为什么会这样?在 Kingfisher 文档中,声明“fromMemoryCacheOrRefresh 可用于在同一 url 后面显示可变图像,同时避免一次又一次地下载它”

4

2 回答 2

2

Kingfisher 不支持服务器缓存机制。它只是使用整个 URL 作为本地缓存键。只要您使用相同的 URL,您就会从缓存中获取相同的图像(如果已缓存)。

因此,如果您的服务器在同一个 URL 下提供不同的图像,我们建议您要求您的服务器为不同版本的 URL 添加查询。这些 URL:“ https://example.com/image.png?v=1 ”和“ https://example.com/image.png?v=2 ”代表 Kingfisher 中的不同图像,它可以很好地工作。同时,访问“ https://example.com/image.png?v=2 ”会将您导航到“ https://example.com/image.png ”数据以用于大多数服务器实现.

您可以在此页面上找到更多信息:

https://github.com/onevcat/Kingfisher/wiki/FAQ#does-kingfisher-support-server-cache-tags-like-e-tag-or-last-modified

于 2018-12-18T02:06:04.697 回答
0

我使用以下方法来解决问题。通过这样做,它会将缓存的图像设置为占位符,并且仅在有任何更改时才替换图像,并且更改不会像在后台完成一样引人注目。如果您需要任何进一步的帮助,请告诉我。注意:这里我正在设置按钮的图像

                    self.avatar.kf.setBackgroundImage(with: URL(string: imagelink), for: UIControl.State()){
                        result in
                        switch result{
                        case .success(let value): 
                        self.avatar.kf.setBackgroundImage(with: URL(string: imagelink), for: UIControl.State(), placeholder: value.image,options: [.forceRefresh])
                        print("avatar set")
                            break
                        case .failure: print("not found in cache")
                            break
                        }
于 2019-12-12T00:44:42.120 回答