gpt4 book ai didi

Swift、Kingfisher 缓存无法正常工作?

转载 作者:行者123 更新时间:2023-11-30 10:46:42 29 4
gpt4 key购买 nike

我正在尝试使用 Cocoapod KingFisher 缓存图像,我使用的代码确实显示数据库存储中的图像,但它不缓存。我很好奇为什么?

打印总是显示“cache Result none”。而且我还注意到图像没有被缓存。

调用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)")
}

}

}

最佳答案

  1. Kingfisher 默认使用 url.absoluteString 作为图像的缓存键。因此,在您的代码中,url.path 将始终返回“未缓存”的结果。

  2. 您正在尝试在设置图像的同时打印缓存结果。第一次,您的图像将处于下载过程中,因此即使您根据 1 正确设置了 key ,您也始终会得到 .none 。在以下使用相同 id 调用此方法时,您应该得到将结果缓存为磁盘或内存。

  3. 我不确定您是如何得出“图像未缓存”的结论的。 Kingfisher默认是根据url做缓存的。如果每次调用 ImageView 设置方法时都有不同的网址(从 imagesStorageRef 返回),则不会有匹配的缓存,并且会发生下载。如果是这种情况,您可以自定义使用 imageId 作为缓存键。为此,您需要指定另一个缓存键。看这个wiki section了解更多。

关于Swift、Kingfisher 缓存无法正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55620443/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com