#ios #swift #firebase-realtime-database #database-schema
#iOS #swift #firebase-база данных в реальном времени #база данных-схема
Вопрос:
По сути, я проверяю, существуют ли какие-либо данные в базе данных firebase или не используются Database.database().reference().child(“users”).hasChild(“somename”)
если у него есть это какое-то имя, тогда я хочу записать на три разных узла в firebase, т. е. на узел отправителя, на узел получателя и еще на один узел, я делаю это, вызывая
Database.database().reference().child(“send).childbyautoid.servalue(somename: somevalue)
Database.database().reference().child(“receiver”).child(“receiverid”).childbyautoid.setvalue(somename: somevalue)
database.database.reference().child(“all”).childbyautoid.setvalue(somename: somevalue)
проблема в том, что я делаю это непосредственно перед закрытием контроллера представления
итак, либо я должен дождаться выполнения всего fire, либо контроллер отключается только после вызова одного fire
это плохой дизайн, что я должен сделать, чтобы немедленно закрыть контроллер, а также получить данные в трех местах firebase
Ответ №1:
Вы можете выполнить несколько операций записи за один раз, используя обновление для нескольких местоположений. В вашем коде это выглядело бы примерно так:
let rootRef = Database.database().reference()
let pushId = rootRef.childByAutoId().key
let updatedUserData = [
"send/(pushId)/someName": someValue,
"receiver/(pushId)/someName": someValue,
"receiver/(all)/someName": someValue
]
// Do a deep-path update
rootRef.updateChildValues(updatedUserData, withCompletionBlock: { (error, ref) -> Void in
if (error) {
print("Error updating data: (error.description)")
}
})
Обработчик завершения также является местом, куда вы помещаете код, который должен выполняться по завершении записи.
Также смотрите:
Комментарии:
1. спасибо, чувак, это работает, но все еще есть задержка, только если бы я мог что-нибудь с этим сделать