ios - 在 viewDidLoad 中调用时 Firebase 观察者未观察到数据库更改

标签 ios swift firebase firebase-realtime-database

我有一个函数,我想充当用户值的观察者,并在呈现 View 时设置一些初始值。

func getParticipantInfo() {
    let groupRef = databaseRef.child("groups").child(currentRoomIdGlobal)
    groupRef.observe(.childAdded, with: { snapshot in
        if let snapDict = snapshot.value as? [String : AnyObject] {
            for each in snapDict {
                let uid  = each.key
                let avatar = each.value["profilePicture"] as! String
                let gender = each.value["gender"] as! String
                let handle = each.value["handle"] as! String
                let name = each.value["name"] as! String
                let status = each.value["status"] as! String

                // Set those to the dictionaries [UID : value]
                self.avatarDictionary.setValue(avatar, forKey: uid)
                self.nameDictionary.setValue(name, forKey: uid)
                self.genderDictionary.setValue(gender, forKey: uid)
                self.handleDictionary.setValue(handle, forKey: uid)
                self.statusDictionary.setValue(status, forKey: uid)
                DispatchQueue.main.async {
                    self.createAvatar(senderId: uid, senderDisplayName: name, photoUrl: avatar,  color: UIColor.lightGray)
                    self.navCollectionView?.collectionView?.reloadData()
                }
            }
        }
    })
}

如果我在 viewDidAppear 中调用它,则效果非常好。它从数据库中获取用户信息,设置字典,一切正常。最重要的是,如果将新用户添加到房间(就像聊天室),该函数会更新字典以包含该新用户的值。

但是,我需要在 viewDidLoad 中调用它,而不是在 viewDidAppear 中。当我这样做时,它可以设置初始值,但是当有人被添加到房间时,直到我离开 View 并再次返回之前,这不会反射(reflect)在应用程序中,所以它不会“观察”它的方式viewDidAppear

为什么在 viewDidLoad 中调用它会突然停止正常观察?我怎样才能让它像 viewDidAppear 中那样实时反射(reflect)变化?

最佳答案

我现在不知道为什么,但这解决了我的问题。我所要做的就是将 .childAdded 更改为 .value,一切都开始按照我的预期进行。我知道这可能不是最佳实践,但它是解决问题的简单方法。

关于ios - 在 viewDidLoad 中调用时 Firebase 观察者未观察到数据库更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44219979/

相关文章:

iphone - NSString Iphone中的特殊字符输出

ios - 如何在 UIImage 上方绘制文本以创建新图像

firebase - Firestore 和 Spring Boot

android - 如何解决 java.lang.NoClassDefFoundError 异常?

javascript - 如何正确使用forkJoin

ios - 远程通知的自定义声音

ios - Apple(Mac 和/或 iPhone)的 URL 方案映射列表

ios - 使用 keyDecodingStrategy 从蛇案例转换为驼案例

ios - 如何根据类中的元素按顺序填充 TableView

ios - Apple CoreData 模板中的属性声明