Показывать обновленные изображения по тому же URL-адресу с помощью Kingfisher ios

Я использую Kingfisher для загрузки изображения с изображениями из URL. Иногда тот же URL-адрес обновляется новым изображением. Итак, я использую приведенный ниже код для загрузки изображения,

profileImage.kf.setImage(with: profileUrl, placeholder: #imageLiteral(resourceName: "profile_1"), options: [.fromMemoryCacheOrRefresh], progressBlock: nil, completionHandler: nil)

Но изображение не обновляется. Показывается только старое изображение. Почему так происходит? В документации Kingfisher указано, что «fromMemoryCacheOrRefresh можно использовать для отображения изменяемого изображения за одним и тем же URL-адресом, избегая при этом его повторной загрузки».


person RP89    schedule 09.09.2018    source источник
comment
Можете ли вы попробовать опцию forceRefresh   -  person Sh_Khan    schedule 09.09.2018
comment
Если использовать forceReferes, он будет загружаться все время, верно?   -  person RP89    schedule 09.09.2018


Ответы (2)


Kingfisher не поддерживает механизм кэширования сервера. Он просто использует весь URL как ключ локального кеша. Пока вы используете один и тот же URL-адрес, вы получите одно и то же изображение из кеша (если оно было кэшировано).

Итак, если ваш сервер предоставляет разные изображения по одному и тому же URL-адресу, мы предлагаем вам попросить ваш сервер добавить запрос к URL-адресу для разных версий. Эти URL-адреса: "https://example.com/image.png?v=1 "и" https://example.com/image.png?v=2 "представляют разные изображения в Kingfisher, и это может хорошо работать. В то же время доступ к "https://example.com/image.png?v=2 "переместит вас к" https://example.com/image.png "данные для большинства реализаций сервера.

Вы можете найти более подробную информацию на этой странице:

https://github.com/onevcat/Kingfisher/wiki/FAQ#does-kingfisher-support-server-cache-tags-like-e-tag-or-last-modified

person onevcat    schedule 18.12.2018

Я использовал следующий подход для решения проблемы. Таким образом, он установит кэшированное изображение в качестве заполнителя и заменит изображение только в том случае, если есть какие-либо изменения, и изменения не будут заметны, как если бы они были выполнены в фоновом режиме. Дайте мне знать, если вам понадобится дополнительная помощь. Примечание: здесь я устанавливаю изображение кнопки

                    self.avatar.kf.setBackgroundImage(with: URL(string: imagelink), for: UIControl.State()){
                        result in
                        switch result{
                        case .success(let value): 
                        self.avatar.kf.setBackgroundImage(with: URL(string: imagelink), for: UIControl.State(), placeholder: value.image,options: [.forceRefresh])
                        print("avatar set")
                            break
                        case .failure: print("not found in cache")
                            break
                        }
person Aakarsh    schedule 12.12.2019