Когда вы вызываете setValue
на дочернем узле, все существующие данные в этом узле заменяются значениями, которые вы передаете setValue
.Если мы посмотрим на ваш первый вызов:
Database.database().reference()
.child("Notification").child("users").child(username)
.setValue(["username": username, "url": Foto_url])
Это заменит все существующие данные в /Notification/users/$username
, включая все данные в его дочернем узле users_want_notification
.Поскольку вы затем добавляете новый дочерний узел в users_want_notification
, похоже, что этот вызов заменяет существующий дочерний узел, но на самом деле это первый setValue
, который удаляет все данные.Вы можете проверить это, кратко закомментировав второй вызов, и вы увидите, что весь users_want_notification
исчезает.
У вас есть два основных варианта:
Использованиеотдельные setValue
вызовы для отдельных свойств username
и url
:
let userRef = Database.database().reference()
.child("Notification").child("users").child(username)
userRef.child("username").setValue(username)
userRef.child("url").setValue(Foto_url])
userRef.child("users_want_notification").child(Pro_user)
.setValue(["Pro_user": Pro_user, "toDeviceID": AppDelegate.DEVICEID])
Поскольку все setValue
вызовы теперь происходят на уровнях ниже /Notification/users/$username
, весь этот узел никогда не заменяется.
Используйте один вызов updateChildNodes
для всех данных, выполнив обновление для нескольких местоположений ( документы ).