アプリのアカウント画像を表示する画面にて、SDWebImageを使用しています。
画像がサーバー上にない場合、placeholderImageを使用して、デフォルト画像を表示しています。
SDWebImageでplaceholderImageを表示した後に画像が追加された場合、追加された画像を反映させるにはどうすればよいのでしょうか。
画像が登録・変更された際、キャッシュを消しているのですが、新しい画像が反映しません。
画像がサーバー上にあり、placeholderImageを使用していない場合には、新しい画像が反映します(他の画面に移動して戻ってきたらですが、、、本当は他の画面に移動しなくても反映してほしい)。
※サーバーにはFirebaseのStorageを利用しています
実際のコード
Swift
1override func viewDidLoad() { 2 super.viewDidLoad() 3 4 accountImageSet(aid: argAid) 5 6} 7 8func accountImageSet(aid: String) { 9 let storageRef = storage.reference() 10 let reference = storageRef.child("account/resize/(aid)_200x200") 11 accountImage.sd_setImage(with: reference, placeholderImage: UIImage(named: "NoImage")) 12} 13 14@IBAction func accountImageTap(_ sender: UITapGestureRecognizer) { 15 let imagePickerController = UIImagePickerController() 16 imagePickerController.sourceType = .photoLibrary 17 imagePickerController.delegate = self 18 self.present(imagePickerController,animated: true,completion: nil) 19} 20 21func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { 22 guard let url = info[.imageURL], let imageUrl = url as? URL else { return } 23 24 let storageRef = storage.reference() 25 let riversRef = storageRef.child("account/(argCid!)")//サーバーでリサイズされて"account/resize/(aid)_200x200"に登録される 26 riversRef.putFile(from: imageUrl, metadata: nil) 27 28 if let cacheKey = accountImage.sd_imageURL?.absoluteString { 29 SDImageCache.shared.removeImageFromMemory(forKey: cacheKey) 30 SDImageCache.shared.removeImageFromDisk(forKey: cacheKey) 31 }else { 32 accountImageSet(aid: argAid!) 33 } 34 35 //フォトライブラリを閉じる 36 picker.dismiss(animated: true) { 37 } 38}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。