【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)