Я использую Kingfisher для загрузки изображения с изображениями из URL. Иногда тот же URL-адрес обновляется новым изображением. Итак, я использую приведенный ниже код для загрузки изображения,
profileImage.kf.setImage(with: profileUrl, placeholder: #imageLiteral(resourceName: "profile_1"), options: [.fromMemoryCacheOrRefresh], progressBlock: nil, completionHandler: nil)
Но изображение не обновляется. Показывается только старое изображение. Почему так происходит? В документации Kingfisher указано, что «fromMemoryCacheOrRefresh можно использовать для отображения изменяемого изображения за одним и тем же URL-адресом, избегая при этом его загрузки снова и снова».
Если использовать forceReferes, он будет загружаться все время, верно?
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» для большей части реализации сервера.
Вы можете найти более подробную информацию на этой странице:
Я использовал следующий подход для решения проблемы. Таким образом, он установит кешированное изображение в качестве заполнителя и заменит изображение только в том случае, если есть какие-либо изменения, и изменения не будут заметны, как если бы они были выполнены в фоновом режиме. Дайте мне знать, если вам понадобится дополнительная помощь. Примечание: здесь я устанавливаю изображение кнопки
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
}
можешь попробовать вариант forceRefresh