Swift Firebase -Как генерировать разные ключи .childByAutoId при использовании Fan Out - PullRequest
0 голосов
/ 11 марта 2019

В моем приложении есть система чата.Когда пользователь нажимает кнопку send для отправки данных сообщения на разные узлы в базе данных - он работает нормально.У меня проблема в том, что я использую веер, и перед отправкой данных я генерирую ключ .childByAutoId.Пользователь нажимает кнопку отправки, чтобы начать процесс, но это всегда одна и та же клавиша .childByAutoId, поэтому я просто перезаписываю данные предыдущего сообщения.Если пользователь открывает виртуальный компьютер и возвращается к нему, то создается новый ключ, но, очевидно, это ужасный урок для системы обмена сообщениями?

Как я могу генерировать разные ключи .childByAutoId каждый раз, когда пользователь нажимает отправить фанату?ушел?

@obj func sendMessageButtonPressed() {

    // ***here's the problem, every time they press send, it's the same exact childByAutoId().key so I'm just overwriting the previous data at the messages/messageId path
    guard let messageId = FirebaseManager.Database.database().reference().child("messages")?.childByAutoId().key else { return }

    var messageIdDict: [String: Any] = [messageId: "1"]

    var messageDict = [String: Any]() // has the fromId, toId, message, and timeStamp on it

    let messageIdPath = "messages/\(messageId)"
    let fromIdPath = "user-messages/\(currentUserId)"
    let toIdPath = "user-messages/\(toId)"

    var fanOutDict = [String: Any]()
    fanOutDict.updateValue(messageDict, forKey: messageIdPath)
    fanOutDict.updateValue(messageIdDict, forKey: fromIdPath)
    fanOutDict.updateValue(messageIdDict, forKey: toIdPath) 

    let rootRef = Database.database().reference()
    rootRef?.updateChildValues(fanOutDict)
}

1 Ответ

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

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

Проблема была в том, что разветвление переписывало то, что изначально было написано по следующим двум путям:

let fromIdPath = "user-messages/\(currentUserId)"
let toIdPath = "user-messages/\(toId)"

Оказалось, что ключ был тем же, потому что данные продолжали перезаписываться.

Способ генерации ключа работает нормально

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