首页 > 解决方案 > 未从 firebase 添加 TableView 事件

问题描述

我正在尝试从 firebase 更新 tableView 值中的值。在观察闭包中将值放入数组中,但之后,它仍然为 0,这是有道理的,因为它是异步的(如果我错了,请纠正我)。但是,这在以前的 tableView 中已经工作过,所以我不确定问题是什么。这是代码:

        let id = Auth.auth().currentUser?.uid
    Database.database().reference().child("users").child(id!).child("createdEvents").observe(.value) { snapshot in
          //self.eventsArray.removeAll()

        let ref = Database.database().reference().child("users").child(id!).child("createdEvents")
        ref.observe(.value) { snapshot in
            print("start")
            print(snapshot.childrenCount)
            let enumerator = snapshot.children
            while let rest = enumerator.nextObject() as? DataSnapshot {
                self.eventsArray.append(rest.key as! String)
            }
               Database.database().reference().child("Events").observe(.value) { (data) in
                    let events = data.value as! [String:[String:Any]]
                    for(_,value) in events{
                        print(self.eventsArray)
                        if(self.eventsArray.contains(value["EventName"]! as! String)){
                            self.actualEvents.append(AdminEvents(evName: value["EventName"]! as! String, evDesc: value["EventDescription"]! as! String, evStartDate: value["start time"]! as! String, evEndDate: value["end time"] as! String, evNumPeople: value["NumberOfPeople"]! as! Int, evNumRegistered: value["currentPeople"] as! Int))
                           }
                        }
                        print("Actual events array " + "\(self.actualEvents)")
                  }
            }
           self.tblEvents.reloadData()
        }

当我测试它时,它会打印出我想要的值。 火力基地结构

这里的最终目标是进入用户 createdEvents 并将 eventTest 和 eventTest1 打印到 tableView,但里面没有值。编辑:我忘了添加事件 firebase 结构,它确实存在。 在此处输入图像描述

标签: iosswiftfirebasefirebase-realtime-databaseswift4

解决方案


好的,我修好了。对于那些想知道的人,我只是删除了围绕这部分的观察闭包,因为我意识到第一部分已经这样做了。

let ref = Database.database().reference().child("users").child(id!).child("createdEvents")
    ref.observe(.value) { snapshot in
        print("start")
        print(snapshot.childrenCount)
        let enumerator = snapshot.children
        while let rest = enumerator.nextObject() as? DataSnapshot {
            self.eventsArray.append(rest.key as! String)
        }

这是新代码:

 Database.database().reference().child("users").child(id!).child("createdEvents").observe(.value) { snapshot in
          //self.eventsArray.removeAll()
        print("start")
        print(snapshot.childrenCount)
        let enumerator = snapshot.children
        while let rest = enumerator.nextObject() as? DataSnapshot {
            self.eventsArray.append(rest.key as! String)
        }
               Database.database().reference().child("Events").observe(.value) { (data) in
                    let events = data.value as! [String:[String:Any]]
                    for(_,value) in events{
                        print(self.eventsArray)
                        if(self.eventsArray.contains(value["EventName"]! as! String)){
                            self.actualEvents.append(AdminEvents(evName: value["EventName"]! as! String, evDesc: value["EventDescription"]! as! String, evStartDate: value["start time"]! as! String, evEndDate: value["end time"] as! String, evNumPeople: value["NumberOfPeople"]! as! Int, evNumRegistered: value["currentPeople"] as! Int))
                           }
                        }
                        print("Actual events array " + "\(self.actualEvents)")
                  }
                self.tblEvents.reloadData()
            }
           self.tblEvents.dataSource = self
           self.tblEvents.delegate = self

        }

推荐阅读