SnapshotListener не удалось получить документ whereField после updateData - PullRequest
0 голосов
/ 07 июня 2019

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

  1. Получить документ из базы данных пожарного магазина, где поле - это определенная строка db.collection("Connections").whereField("UID", isEqualTo: user.uid).whereField("status", isEqualTo: "waitingForUser").addSnapshotListener { (querySnap, error) in
  2. Я храню let thisStatus: String = data?["status"] as! String, а затем у меня есть оператор switch, который выполняет задачи в зависимости от текущего состояния.

  3. Если существует ИД пользователя со статусом waitForUser Мне нужно обновить статус до onGoing

    let document = querySnap?.documents.first document?.reference.updateData(["status": "onGoing"], completion: { (error) in

Мне нужен слушатель снимка, потому что я буду менять статус несколько раз.

Проблема, с которой я столкнулся, заключается в том, что она запускается успешно в первый раз, но после шага 3 она переходит к шагу 1 и там, поскольку условие ложно, поскольку статус больше не waitForUser это onGoing , следовательно, заставляет программу выдавать фатальную ошибку, поскольку data?["status"] нет. Что я должен сделать, чтобы сделать эту работу, мне нужен слушатель, и мне нужно несколько раз менять статус.

Вот полный блок кода ОБНОВЛЕНО :

    db.collection("Connection").whereField("UID2", isEqualTo: user.uid).whereField("status", isEqualTo: "waitingForUser2").addSnapshotListener { (querySnap, error) in
        if let error = error {
            print("Error: \(error)")
        } else {

            let data = querySnap?.documents.first?.data()

            guard let thisStatus: String = data?["status"] as! String 
            else { return }

            switch thisStatus {
            case "waitingForUser2":
                //Update the status to onGoing
                let document = querySnap?.documents.first

                document?.reference.updateData([
                                "status": "onGoing"
                                ], completion: { (error) in

                                    print("Status is now on going")
                })

            case "connectionMade":
                print("it's connection made")
            default:
                print("DEFAULT is ON")
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...