如何处理与观察levent相同的孩子



我有一个uiitaiteview,它将与此功能正确加载:

    channelRef?.observeSingleEvent(of: .value, with: { (snapshot) in
        self.updateTableViewWithPlayers(snapshot: snapshot)
    })
func updateTableViewWithPlayers(snapshot: FIRDataSnapshot)
    {
print(snapshot)
        let storage = FIRStorage.storage()
        let storageRef = storage.reference(forURL: "gs://omega-towers-f5beb.appspot.com")
            if let snapDict = snapshot.value as? [String:AnyObject]{
                for each in snapDict{
                    print(each.value)
                    let UIDs = each.value["userID"] as? String
                    let pictureVersion = each.value["PictureVersion"] as? String
                    if let allUIDS = UIDs{
                        if let allPictureVersions = pictureVersion{

如果其中有1个用户,则将其打印为输出:

Snap (-KeEan584BeCQ0eJ2dxs) {
    "-KeEb2XMrCUFLfO90y0v" =     {
        PictureVersion = 6;
        userID = N4GifT8HvfRrDEkC09ARC1DnYyI3;
        username = pietje;
    };
    name = sdddd;
}
{
    PictureVersion = 6;
    userID = N4GifT8HvfRrDEkC09ARC1DnYyI3;
    username = pietje;
}

这很好。现在,我想在新用户加入时更新表视图。我添加了此功能:

    channelRef?.observe(.childAdded, with: { (snapshot) -> Void in
        self.updateTableViewWithPlayers(snapshot: snapshot)
    })

这打印出来:

Snap (-KeEbYVJIle8dhP1Oyxm) {
    PictureVersion = 6;
    userID = N4GifT8HvfRrDEkC09ARC1DnYyI3;
    username = pietje;
}
6
pietje
N4GifT8HvfRrDEkC09ARC1DnYyI3

我不知道为什么此输出有所不同。我想具有1个可以处理这两个功能的函数(观察和观察levent),但是我不确定为什么观察功能无法正常工作。谁能帮我吗?

您所说的它打印出来似乎很奇怪,但想法是以下内容: observesingLeevent 只能按照名称建议运行一次。观察另一方面,每当需要由Firebase Cloud调用类型时,都会调用。这意味着,如果您使用** observesingleevent **对于类型 .childadded ,则只能为一个孩子调用您的块,而一个通常 .childaded 运行该快照中的每个孩子。每次添加新孩子时,都会继续被调用。如果您希望每次添加新孩子时都更新桌面视图,则应使用 observe .childadded

我不确定我是否回答了您的问题。如果没有,请告诉我。