Swift, FIrebase - не может удалить наблюдателей с помощью removeAllObservers - PullRequest
0 голосов
/ 24 мая 2018

Я пытался удалить наблюдателей некоторое время, но почему-то мне это никогда не удавалось.Я проверил другие сообщения здесь, но я не могу найти причину.

Вот мои коды:

var ref: DatabaseReference!

let timeStamp: Double = NSDate().timeIntervalSince1970

override func viewDidLoad() {
    super.viewDidLoad()

    self.ref = Database.database().reference()

    guard let userId = Auth.auth().currentUser?.uid else { return }
    self.ref.child("users").child(userId).child("contactList").observe(.value, with: { (snapshot) in

        guard let children = snapshot.value as? [String: Any] else { return }
        for child in children {

            guard let dictionary = child.value as? [String: Any] else { return }
            guard let timeStamp = dictionary["timeStamp"] as? String else { return }
            guard let timeStampDouble = Double(timeStamp) else { return }

            if timeStampDouble > self.timeStamp {
                self.navigationController?.pushViewController(HomeController(), animated: true)
            }

        }

    }) { (err) in
        print("Failed to fetch user: ", err)
    }
}

deinit {
    self.ref.child("users").removeAllObservers()
}

Буду признателен за любой совет!

1 Ответ

0 голосов
/ 24 мая 2018

Вызов removeAllObservers на узле, удаляет всех наблюдателей только из этого узла.Он не удаляет наблюдателей из дочерних узлов.

Итак, ваш код:

self.ref.child("users").removeAllObservers()

Это только удаляет наблюдателей из users.Не удаляет наблюдателей из users/$userId/contactList.Чтобы удалить последний, вам нужно будет вызвать removeAllObservers на этого конкретного узла, что означает, что вам нужно отслеживать, к каким узлам вы прикрепили наблюдателей.

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