Swift,Kingfisher Cache无法正常工作?

时间:2019-04-10 19:58:54

标签: swift image caching kingfisher

我正在尝试使用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)")
            }

        }

    }

1 个答案:

答案 0 :(得分:0)

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

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

  3. 我不确定您如何得出“未缓存图像”的结论。翠鸟默认情况下基于URL进行缓存。如果每次都使用不同的URL(从imagesStorageRef返回),则调用图像视图设置方法,将没有匹配的缓存并进行下载。在这种情况下,您可以自定义使用imageId作为缓存键。为此,您需要指定另一个缓存键。有关更多信息,请参见此wiki section