【Swift】SDWebImageで新しい画像が反映されない問題

どうも、ねこきち(@nekokichi1_yos2)です。

 

FirebaseのSDWebImageでStorageに新しくアップロードした画像が表示されず、更新前の画像が表示されてしまう問題の解決策を書いていきます。

 

解説

 

原因は、ローカル(デバイス?)に保存されたキャッシュにあるようです。

 

なので、

  • キャッシュを削除
  • キャッシュを更新する

の方法を使えば解決します。

 

キャッシュの削除には、方法が3つ。

//ディスク、メモリのキャッシュを削除
SDImageCache.shared.clearMemory()
SDImageCache.shared.clearDisk(onCompletion: nil)

//指定URLのキャッシュを削除
SDImageCache.shared.removeImage(forKey: "画像URL", withCompletion: nil)

 

ローカル上のキャッシュを全て削除するか、URLで指定した画像のキャッシュのみを削除するか。

 

自分のプロフィール画像だけならURLで指定すればいいですが、他ユーザーの画像を多数使用するなら、0から画像をダウンロードする処理が増えるので、下手に全キャッシュを削除しない方が良いかと。

 

キャッシュの更新は、ImageViewなどに画像をセットするときに、optionで.refreshCachedと指定するだけです。

//キャッシュを更新し、指定URLの画像をセット
imageView.sd_setImage(with: 画像URL, placeholderImage: nil, options: SDWebImageOptions.refreshCached, context: nil)

 

もしURL先の画像が変更されてたら、古いキャッシュを消して、新しい画像のキャッシュを取り込んで表示してくれます。  

 

ソースコード

 

//ディスク、メモリのキャッシュを削除
SDImageCache.shared.clearMemory()
SDImageCache.shared.clearDisk(onCompletion: nil)

//指定URLのキャッシュを削除
SDImageCache.shared.removeImage(forKey: "画像URL", withCompletion: nil)

//キャッシュを更新し、指定URLの画像をセット
imageView.sd_setImage(with: 画像URL, placeholderImage: nil, options: SDWebImageOptions.refreshCached, context: nil)

 

参考

stackoverflow.com

stackoverflow.com

stackoverflow.com