SDWebImageOptions.refreshCached不刷新缓存

时间:2019-02-07 22:31:49

标签: ios swift firebase sdwebimage nscache

在Firebase存储后端上更新映像时,我一直无法获取SDWebImage缓存。如我在堆栈交换上阅读的其他答案中所建议的,我已经实现了.refreshCached,但是在更新服务器后,似乎仍加载了相同的映像。为了确认这是一个缓存问题,我已经测试了下载未缓存的图像并收到了正确的结果。关于我可能做错了什么或更好的缓存库的任何想法。谢谢!

我知道问题出在更新缓存的URL,但是有一种方法可以检测服务器上何时更改了数据。

SDWebImage, Swift: SDWebImageRefreshCached unresolved identifier

How to update image in cache when image changed on server with SDWebImage

Firebase Storage Tutorial Using sd_setImage

我的实施

 self.userProfileImage.sd_setImage(with: URL(string: user.photoURL), placeholderImage: placeHolder, options: SDWebImageOptions.refreshCached, completed: {image,error,imageCacheType,storageRef in
                    if let error = error{
                        print("Error during initial cache load 1: \(error)")
                    }
 })

2 个答案:

答案 0 :(得分:0)

Cloud Storage(用于Firebase)中没有用于更改文件的通知机制。因此,确保立即获取文件最新数据的唯一方法是不对其进行缓存。

或者,许多开发人员使用Firebase实时数据库或Cloud Firestore为每个文件存储一些元数据,然后在文件更改时更新该元数据。通过将侦听器附加到数据库中文件的元数据(请参见Realtime DatabaseCloud Firestore的示例),然后可以强制重新加载图像。

您甚至可以更进一步,使用Cloud Functions检测何时写入文件,然后从那里更新该文件的元数据。这意味着上传图像的应用程序不必更新数据库本身,因为Cloud Functions会在后台进行更新。

答案 1 :(得分:0)

尝试以下代码。在这种情况下,您需要从完成块设置图像。

self.imageView.sd_setImage(with: URL(string: url)!, placeholderImage: nil, options: .refreshCached) { (image, error, cacheType, url) in
            self.imageView.image = image
        }