如何替换存储在缓存中的图像?

时间:2017-01-19 01:50:54

标签: ios swift caching firebase firebase-storage

在我的应用程序中,我在浏览tableView时缓存用户的图像以使用更少的数据。我正在加载配置文件图片时缓存它们,但是,当我更改当前用户的配置文件图片时,当前用户创建的帖子上的缓存图像不会更改。

工作方式如下:

  • 我检索了所有用户都写过的帖子,并在tableView
  • 上显示
  • 帖子包含用户ID
  • 我使用用户ID获取用户的用户名,姓名和个人资料照片
  • 将图像检索到tableView时,我会将其缓存
  • 当用户更改个人资料照片时,tableView上显示的图像与上一个图像相同,而不是新图像

所以我们回到我的问题,如果用户个人资料图片发生变化,我怎样才能替换缓存的图片?

这是我的缓存扩展,如果它对任何事情都有帮助:

import UIKit
import Firebase
import FirebaseStorage

let imageCache = NSCache<AnyObject, AnyObject>()

var databaseRef: FIRDatabaseReference! {
    return FIRDatabase.database().reference()
}

var storageRef: FIRStorage! {
    return FIRStorage.storage()
}

extension UIImageView{

    func loadProfilePictureWithCash(postUser: String){

        let userRef = databaseRef.child("users/\(postUser)")

        userRef.observe(.value, with: { (snapshot) in

            let user = User(snapshot: snapshot)

            let imageURL = user.photoURL!

            // check cache for image first
            if let cachedImage = imageCache.object(forKey: imageURL as AnyObject){
                self.image = cachedImage as? UIImage
                return
            }
            else{
                storageRef.reference(forURL: imageURL).data(withMaxSize: 1 * 1024 * 1024, completion: { (imageData, error) in
                    if error == nil {

                        DispatchQueue.main.async {
                            if let data = imageData{

                                if let downloadedImage = UIImage(data: data) {
                                    imageCache.setObject(downloadedImage, forKey: imageURL as AnyObject)

                                    self.image = downloadedImage
                                }

                            }
                        }

                    }
                    else{
                        print(error?.localizedDescription as Any)
                    }
                })
            }

        }) { (error) in
            print(error.localizedDescription)
        }

    }

}

0 个答案:

没有答案