Сохранение счета в firebase с прикрепленными значениями - PullRequest
0 голосов
/ 23 февраля 2020

То, чего я хочу достичь sh - это сохранить счет в базе данных, к которому прикреплены два значения. Вот код, который записывает счет в Firebase.

func writeToFirebase() {
    DispatchQueue.global(qos: .userInteractive).async {
        self.ref = Database.database().reference()
        if GameManager.instance.getTopScores().contains(GameManager.instance.getGameScore()) {
            self.ref?.child("user")
                .child(GameManager.instance.getUsername())
                .child(String(GameManager.instance.getGameScore()))
                .updateChildValues( [
                    "badge":GameManager.instance.getBadgeLevel(),
                    "vehicle": GameManager.instance.getVehicleSelected()
                ]
            )
        }
    }
}

Проблема, с которой я сталкиваюсь, заключается в том, что когда новый счет сохраняется со своими значениями, он иногда перезаписывает другие результаты. Это кажется случайным, и это не так, когда они имеют одинаковый счет или что-то в этом роде. Иногда он будет перезаписывать только один балл, а иногда и несколько. Я смотрю Firebase, и я вижу, что он перезаписывается, он становится красным, а затем удаляется. Иногда добавляемая новая оценка будет красной и будет удалена. Счет не должен быть ребенком, но я не знаю, как прикрепить значения к нему, если это не так. Любая помощь приветствуется

enter image description here

1 Ответ

0 голосов
/ 25 февраля 2020

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

Существуют ситуации, когда наблюдатель может быть добавлен в узел и когда данные изменяются в этом узле, например, запись или обновить, он запустит того наблюдателя, который может затем перезаписать существующие данные с помощью nil.

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

Как предлагается в моем комментарии, добавьте точку останова в функцию, которая выполняет запись и запустить код. Посмотрите, если эта функция вызывается дважды (или более). Если это так, то при первой записи данные сохраняются должным образом, но при повторном вызове записываемые значения, вероятно, равны нулю, что делает узел «go прочь», поскольку узлы Firebase не могут существовать без значения.

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

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