У меня есть этот метод, который принимает эти слова и сохраняет их как обновление базы данных, но дважды запускает .childMoved, который слушает чат пользователя.
let message = ["message":message,
"uid":my_uid,
"timestamp":Firebase.ServerValue.timestamp()] as [String : Any]
let myChatID_info = ["timestamp":Firebase.ServerValue.timestamp(),
"uid": user_uid,
"unread_messages":0] as [String : Any]
let user_chatID_info = ["timestamp":Firebase.ServerValue.timestamp(),
"uid":my_uid,
"unread_messages":unread_messages+1] as [String : Any]
let childUpdates = ["/user_chats/\(my_uid)/\(chat_key)/":myChatID_info,
"/user_chats/\(user_uid)/\(chat_key)/":user_chatID_info,
"messages/\(chat_key)/\(message_key)/":message]
self.ref.updateChildValues(childUpdates)
Это метод, который слушает пользователя. чат, где user_chats
user_chats = ref.child(chatConstants.user_chats).child(myUsername)
func addChatMovedListener(){
user_chats.queryOrdered(byChild: chatConstants.timestamp).observe(.childMoved, with: {(snapshot) in
print("chatMoved")
let index = self.indexOfChat(key: snapshot.key)
self.getChatObject(snapshot: snapshot) { chat in
if(index == -1){
self.chats.insert(chat, at: 0)
self.tableView.insertRows(at: [IndexPath(row: 0, section: 0)], with: .automatic)
} else {
self.chats[index] = chat
let chat = self.chats.remove(at: index)
self.chats.insert(chat, at: 0)
self.tableView.moveRow(at: IndexPath(row: index, section: 0), to: IndexPath(row: 0, section: 0))
}
}
})
}