Swift, Kingfisher Cache не работает должным образом? - PullRequest
0 голосов
/ 10 апреля 2019

Я пытаюсь кэшировать изображения с помощью 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 голосов
/ 15 апреля 2019
  1. Kingfisher использует url.absoluteString в качестве ключа кэша для изображения по умолчанию. Таким образом, в вашем коде url.path всегда будет возвращать вам результат «не кэшировано».

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

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

...