Firebase-наблюдатель не работает, почему он не следит за изменением стоимости? - PullRequest
0 голосов
/ 25 декабря 2018

Я пытаюсь установить наблюдателя Firebase, вызывая следующее:

ref.child(id).child("isLocked").observe(.value, with: { snapshot in

    print("isLocked = ", snapshot.value!)

})

Когда представление загружается, оно работает отлично.Он печатает правильное значение.

Когда я изменяю значение в самом Firebase или на отдельном устройстве, isLocked больше никогда не печатается.Когда это должно быть, так как у меня есть наблюдатель на пути.Что дает?

Конечной целью здесь является предоставление UIB-кнопки, доступной в зависимости от того, является ли значение lock истинным для false.

Представление загружается с помощью button.isHidden = true.

ОБНОВЛЕНИЕ

Я обнаружил, что источник моей проблемы с наблюдателем не "Работает"

Может показаться, что существует проблема с синхронизацией.

В предыдущем контроллере представления (который переходит в новый контроллер представления) я звоню ref.child(pID).child("isLocked").removeAllObservers() в функции 'viewDidDisappear'

А в новом контроллере представления я "пытаюсь"установить тот же путь наблюдателя 'ref.child (id) .child ("isLocked"). Наблюдать (.value, с: {snapshot in'

, который, я думаю, removeAllObservers() превосходит настройку новогонаблюдатель !? Как мне с этим справиться!?

Ответы [ 2 ]

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

Я обнаружил, что источник моей проблемы с наблюдателем не "Работает"

Может показаться, что существует проблема синхронизации.

В контроллере предыдущего представления (который переходит в новое представлениеконтроллер) Я звоню ref.child(pID).child("isLocked").removeAllObservers() в функции viewDidDisappear

И в новом контроллере представления "пытаюсь" настроить того же "наблюдателя пути" ref.child(id).child("isLocked").observe(.value, with: { snapshot in.

, которыйЯ думаю, что removeAllObservers() превосходит настройку нового наблюдателя !?

Чтобы исправить это, вам нужно установить определенные маркеры для каждого наблюдателя!Убедитесь, что вы используете уникальные имена переменных и не используете их повторно, а затем вызовите следующее вместо removeAllObservers():

ref.child(id).child("isLocked").removeObserver(withHandle: confirmVCRefHandle!)

указанное выше имя дескриптора confirmVCRefHandle уникально и проблема с синхронизацией устранена!

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

Попробуйте это:

ref.child(id).observe(.childChanged, with: { snapshot in

    if snapshot.key == "isLocked" {
        if let value = snapshot.value as? Bool {
            print(value)
        }
    }
})
...