В моем приложении есть система чата.Когда пользователь нажимает кнопку 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)
}