Подсчет базы данных Firebase для детей и отображение - PullRequest
0 голосов
/ 19 декабря 2018

Я запрограммировал tableView, который отображает сообщения из моей базы данных Firebase.В моей боковой панели (до того, как пользователь попадет в tableView) я добавил метку, которая должна отображать количество сообщений, отображаемых в tableView, чтобы пользователь знал, есть ли что-то внутри.Итак, мой вопрос: как я могу отследить количество детей, сохраненных в моей теме «предложения», и отобразить их в моем counterLbl?

var ref: DatabaseReference!
ref = Database.database().reference()

ref.child("offers").observe(.childAdded, with: { snapshot in

counterLbl.text = ...
}

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Если вы уже прослушиваете .childAdded, вы можете просто сохранить счетчик и увеличить его на:

var nodeCount: Int = 0

ref.child("offers").observe(.childAdded, with: { snapshot in
    nodeCount = nodeCount + 1
    counterLbl.text = String(nodeCount)
}

Если ваш вариант использования также позволяет удалять узлы из базы данных,Вы также должны прислушиваться к .childRemoved, чтобы уменьшить счетчик:

ref.child("offers").observe(.childRemoved, with: { snapshot in
    nodeCount = nodeCount - 1
    counterLbl.text = String(nodeCount)
}

Более сложный сценарий

Обратите внимание, что этот подход требует загрузки всех узловчто вы хотите посчитать.Это должно работать нормально в вашем текущем сценарии, так как вы все равно скачиваете все предложения.Но когда вы получаете больше данных, вы можете захотеть только прочитать / отобразить подмножество предложений, и в этом случае приведенный выше код будет подсчитывать только узлы в этом подмножестве.

Если вам все еще требуется подсчет всех предложений в этом случае, общий подход заключается в сохранении отдельного значения счетчика в базе данных, которое вы обновляете при каждом добавлении / удалении предложения.Подробнее об этом см .:

0 голосов
/ 19 декабря 2018

Шаг 1. Создайте класс со значениями, которые вы хотите сохранить

class ListModel: NSObject {
    var UID:String?
    var Name:String?
    var Email:String?
}

Шаг 2. В вашем ViewController добавьте следующий код

var ListArr = [ListModel]()


let ref = Database.database().reference().child("offers")
ref.observe(.childAdded, with: { (snapshot) in
    print(snapshot)
    guard let dictionary = snapshot.value as? [String : AnyObject] else {
       return
   }
   let Obj = ListModel()
   Obj.UID = snapshot.key
   Obj.Name = dictionary["name"] as? String
   Obj.Email = dictionary["email"] as? String

   self.ListArr.append(Obj)
   self.myTableView.delegate = self
   self.myTableView.dataSource = self
   self.myTableView.reloadData()

}, withCancel: nil)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...