在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)")
}
})
答案 0 :(得分:0)
Cloud Storage(用于Firebase)中没有用于更改文件的通知机制。因此,确保立即获取文件最新数据的唯一方法是不对其进行缓存。
或者,许多开发人员使用Firebase实时数据库或Cloud Firestore为每个文件存储一些元数据,然后在文件更改时更新该元数据。通过将侦听器附加到数据库中文件的元数据(请参见Realtime Database和Cloud 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
}