События TableView не добавляются из firebase - PullRequest
0 голосов
/ 18 января 2020

Я пытаюсь обновить значения в значении tableView из firebase. Значения помещаются в массив во время закрытия наблюдения, но после этого он остается равным 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()
        }

И он выводит значения, которые мне нужны, когда я его тестирую. the firebase structure

Конечной целью здесь является go в пользовательские createEvents и печать eventTest и eventTest1 в tableView, но без значений внутри. Изменить: я забыл добавить структуру Firebase событий, она существует. enter image description here

Ответы [ 2 ]

0 голосов
/ 18 января 2020

Хорошо, я исправил это. Для тех, кто интересуется, я просто удалил закрытие наблюдения вокруг этой части, потому что понял, что первая часть уже делает это.

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

        }
0 голосов
/ 18 января 2020

Я не вижу ни одного ребенка в вашей БД с именем "Events".

Database.database().reference().child("Events").observe(.value) { (data) in
...