Невозможно получить / прочитать данные из базы данных реального времени Firebase в UITableViewController - PullRequest
1 голос
/ 27 апреля 2019

Я могу успешно записывать данные из моего приложения в базу данных реального времени Firebase. Я не могу получить данные и отобразить их в UIViewController.

У меня есть стек поиска, документы на YouTube и Firebase, и не повезло Я распечатал счетчик, и он возвращает 0. Я считаю, что цикл For не повторяется или неправильно добавляется в мой массив. У меня есть три силы принудительно оборачивать и разворачивать refRepairs, и помещая databaseHandle из него.

    override func viewDidLoad() {
    super.viewDidLoad()
    refRepairs = Database.database().reference().child("repairs");

    //observing the data changes
    refRepairs!.child("repairs").observe(DataEventType.value, with: { (snapshot) in

        //if the reference have some values
        if snapshot.childrenCount > 0 {

            //clearing the list
            self.repairList.removeAll()

            //iterating through all the values
            for repairs in snapshot.children.allObjects as! [DataSnapshot] {
                //getting values
                let repairObject = repairs.value as? [String: AnyObject]
                let brand  = repairObject?["brand"]
                let id  = repairObject?["id"]
                let modelNumber = repairObject?["modelNumber"]

                //creating artist object with model and fetched values
                let repair = RepairModel(id: id as! String?, brand: brand as! String?, modelNumber: modelNumber as! String?)

                //appending it to list
                print(snapshot.childrenCount)

                self.repairList.append(repair)
            }

            //reloading the tableview
            self.doListTableView.reloadData()
        }
    })
}

Я внес изменения, и это работало !!! Сейчас я пытаюсь добавить записи в базу данных с помощью uid, и я успешно это сделал. Теперь у меня та же проблема, когда я не могу отобразить записи. Я напечатал счет, и он возвращает 1 запись, которая является правильной. Вот новый код.

    override func viewDidLoad() {
    super.viewDidLoad()
    refRepairs = Database.database().reference().child("repairs");

    //observing the data changes
    //refRepairs!.child("uid").observe(DataEventType.value, with: { (snapshot) in


        //observing the data changes
        refRepairs!.observe(DataEventType.value, with: { (snapshot) in
        //if the reference have some values
        if snapshot.childrenCount > 0 {

            //clearing the list
            self.repairList.removeAll()

            //iterating through all the values
            for repairs in snapshot.children.allObjects as! [DataSnapshot] {
                //getting values
                let repairObject = repairs.value as? [String: AnyObject]
                let brand  = repairObject?["brand"]
                let uid = repairObject?["uid"]
                let id  = repairObject?["id"]
                let modelNumber = repairObject?["modelNumber"]

                //creating artist object with model and fetched values
                let repair = RepairModel(uid: uid as! String?, id: id as! String?, brand: brand as! String?, modelNumber: modelNumber as! String?)

                //appending it to list
                print(snapshot.childrenCount)

                self.repairList.append(repair)
            }

            //reloading the tableview
            self.doListTableView.reloadData()
        }
    })
}

1 Ответ

0 голосов
/ 27 апреля 2019

Вы ищете другого второго ребенка, которого называют ремонтом, когда вы «наблюдаете за изменениями данных». Попробуйте это:

override func viewDidLoad() {
  super.viewDidLoad()
  refRepairs = Database.database().reference().child("repairs");

  //observing the data changes
  refRepairs!.observe(DataEventType.value, with: { (snapshot) in

    ...

Если это не сработает. Используйте метод наблюдающий единый случай из Firebase

...