как записать данные на базе Firebase на трех разных узлах на одном, не закрывая вид контроллера - PullRequest
0 голосов
/ 28 марта 2019

В основном я проверяю, существуют ли какие-либо данные в базе данных 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)

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

1 Ответ

1 голос
/ 28 марта 2019

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

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)")
    }
})

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

Также см .:

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