Наблюдать за изменением ребенка в базе данных в реальном времени? - PullRequest
0 голосов
/ 27 мая 2020

Как правильно отслеживать изменения ребенка в базе данных в реальном времени?

Это то, что я пробую, но ничего не печатается, когда я вручную обновляю значение billingUpdated (Int) из веб-консоли.


    let userID = Auth.auth().currentUser?.uid as! String
    let ref = Database.database().reference()

    override func viewDidLoad() {

        super.viewDidLoad()

        self.ref.child("users").child(userID).child("billingUpdated").observe(.childChanged, with: { (snapshot) in


            print("child changed")

        })

    }

1 Ответ

0 голосов
/ 27 мая 2020

Вся документация и руководства по этому вопросу устарели, поскольку последняя версия swift ~ кажется простой, но не работает, как бы я ни писал код.

Я так и не нашел ответа, но вот мой обходной путь. Если вы знаете ответ, дайте мне знать.

Обходной путь: l oop НаблюдатьSingleEvent, пока значение не изменится.

Под viewDidLoad: waitForChange()

Функция:

func waitForChange() {

        self.ref.child("users").child(self.userID).child("billingUpdated").observeSingleEvent(of: .value) { (snapshot) in

            let billingUpdated = snapshot.value as! Int

            if billingUpdated == 0 {
                DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
                    print("looping again")
                    self.waitForChange()
                }
            }
            else{
                print("value has been updated")
            }
        }
    }

Я добавил DispatchQueue.main.asyncAfter, поэтому l oop не запускается 100 раз в секунду .

...