Ios 如何实时观察firebase存储的变化并更新viewcontroller?

Ios 如何实时观察firebase存储的变化并更新viewcontroller?,ios,swift,firebase,firebase-storage,Ios,Swift,Firebase,Firebase Storage,我正在构建一个应用程序,用户可以使用firebase服务(firebase存储)更新其个人资料图片 在我的应用程序中,用户可以有多个朋友,并且他的朋友的照片显示在视图控制器中 我想实现的是,当用户更新他的个人资料图片时,他的所有朋友(使用其他设备连接)都会实时更改他的图片 为此,我认为最简单的解决方案是观察存储中的变化 下面是我用来上传用户图片的代码 let storage = FIRStorage.storage() let storageref =

我正在构建一个应用程序,用户可以使用firebase服务(firebase存储)更新其个人资料图片

在我的应用程序中,用户可以有多个朋友,并且他的朋友的照片显示在视图控制器中

我想实现的是,当用户更新他的个人资料图片时,他的所有朋友(使用其他设备连接)都会实时更改他的图片

为此,我认为最简单的解决方案是观察存储中的变化

下面是我用来上传用户图片的代码

 let storage = FIRStorage.storage()
                    let storageref = storage.reference(forURL: "my firebase url")
                    let imageref = storageref.child("images")
                    let userid : String = (user.uid)
                    let spaceref = imageref.child("\(userid).jpg")

                    let imageConverter = ImageConverter()
                    var profilePicture : UIImage = imageConverter.cropToBounds(image: self.profilePicture.image!, width: 150 ,height: 150)
                    profilePicture = imageConverter.resizeImage(image: profilePicture, targetSize: CGSize(width: 140, height: 150))
                    let imageData = UIImagePNGRepresentation(profilePicture)
                    _ = spaceref.put(imageData!, metadata: nil){ metadata, error in
                        if (error != nil) {
                            loadingScreenViewController.view.removeFromSuperview()
                            self.alert(title: "Error", description: "please check your internet connection and try again")
                        }
                        else {
                            _ = metadata!.downloadURL
                        }

                    loadingScreenViewController.view.removeFromSuperview()
有人知道如何观看firebase存储中的变化吗

我只需使用

let imageRef = storage.child("images/\(friendsManager.friends[indexPath.row].id).jpg")

据我所知,Firebase不支持在存储模块中“监视更改”。解决这个问题的最佳方法是将配置文件图像的URL存储在实时数据库中,然后在那里侦听更改并相应地下载图像。为每个图像使用随机生成的字符串,以便确保它们是唯一的。差不多-

 _ = spaceref.put(imageData!, metadata: nil){ metadata, error in
      if (error != nil) {
             loadingScreenViewController.view.removeFromSuperview()
             self.alert(title: "Error", description: "please check your internet connection and try again")
      } else {
             if let downloadUrl = metadata.downloadURL() {
                 let db = Database.database().reference()
                 db.child("profiles").child("myuserid").setValue(["photoUrl" : downloadUrl])
             }
      }
然后观察变化-

profilesRef.observe(.childChanged, with: { (snapshot) -> Void in
  // Download the image from the stored url
})