Swift, Kingfisher Cache не работает должным образом?

Я пытаюсь кэшировать изображения с помощью 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)")
            }

        }

    }

person olle    schedule 10.04.2019    source источник
comment
Буду признателен за любую помощь в этом вопросе, спасибо!   -  person olle    schedule 11.04.2019


Ответы (1)


  1. Kingfisher по умолчанию использует url.absoluteString в качестве ключа кэша для изображения. Таким образом, в вашем коде url.path всегда будет возвращать вам результат «не кэшируется».

  2. Вы пытаетесь распечатать результат кеша одновременно с установкой изображения. В первый раз ваше изображение будет загружаться, поэтому вы всегда получаете .none, даже если вы правильно установили ключ в соответствии с 1. При следующем вызове этого метода с тем же идентификатором вы должны получить результат кеша либо в виде диска, либо в памяти. .

  3. Я не уверен, как вы пришли к выводу, что «изображения не кэшируются». Kingfisher по умолчанию выполняет кеширование на основе URL-адреса. Если у вас каждый раз разные URL-адреса (которые возвращаются из вашего imagesStorageRef), вы вызываете метод настройки просмотра изображения, не будет соответствующего кеша, и произойдет загрузка. Если это ваш случай, вы можете вместо этого использовать imageId в качестве ключа кэша. Для этого вам нужно указать другой ключ кэша. Дополнительную информацию см. в этом разделе вики.

person onevcat    schedule 15.04.2019