我正在尝试使用Cocoapod KingFisher缓存图像,我使用的代码确实显示了数据库存储中的图像,但没有缓存。我很好奇知道为什么吗?
打印始终显示“没有缓存结果”。而且我还注意到图像没有被缓存。
调用imageDownloader的代码:
DownloadImage(imageId : nextUser.id, cardImage: secondProfilePic)
用于下载和缓存的代码,还用于检查是否已缓存。
func DownloadImage(imageId : String, cardImage : UIImageView){
let imagesStorageRef = Storage.storage().reference().child("profilepic/").child(imageId)
//Get URL For Cache
imagesStorageRef.downloadURL { url, error in
if let error = error {
// Handle any errors
cardImage.image = UIImage(named: "RentOutProfilePic")
print("Error")
} else {
// Get the download URL for '.jpg'
let pathURL = url
print("Sets Image")
cardImage.kf.indicatorType = .activity
cardImage.kf.setImage(with: pathURL,
options: [
.transition(.fade(0.3)),
.cacheOriginalImage
])
}
if let url = url{
let tempUrl:String = url.path
let cache = ImageCache.default
let cached = cache.imageCachedType(forKey: tempUrl)
print("cache Result \(cached)")
}
}
}
答案 0 :(得分:0)
Kingfisher默认使用url.absoluteString
作为图像的缓存键。因此,在您的代码中,url.path
将始终返回“未缓存”的结果。
您正在尝试在设置图像的同时打印缓存结果。第一次,映像将处于下载过程中,因此即使您根据1正确设置了密钥,也始终会得到.none
,在此方法中,使用相同的id进行以下调用时,您应该得到一个缓存结果作为磁盘或内存。
我不确定您如何得出“未缓存图像”的结论。翠鸟默认情况下基于URL进行缓存。如果每次都使用不同的URL(从imagesStorageRef
返回),则调用图像视图设置方法,将没有匹配的缓存并进行下载。在这种情况下,您可以自定义使用imageId
作为缓存键。为此,您需要指定另一个缓存键。有关更多信息,请参见此wiki section。