Мое приложение имеет несколько комнат чата, построенных с использованием Swift
и Firebase
.
В некоторых из этих комнат может быть несколько сотен сообщений, в то время как в более популярных комнатах их более 10000.
IЯ использую запрос для ограничения до последних 100.
Проблема, с которой я столкнулся, заключается в том, что при получении нового сообщения в сообщении с индексом 0 он удаляется.Я хотел бы иметь возможность просто постоянно добавлять данные в мой массив, когда пользователь входит в чат, чтобы при прокрутке вверх, чтобы прочитать прошлые сообщения, он останется с тем же индексом, что и новые сообщения.
Есть ли способ изменить мой код ниже?:
self.chatsRef = ref.child("ABC").child(xyz)
self.chatsRef.queryLimited(toLast: 100).observe(.value, with: { snapshot in
self.data.removeAll()
self.hideProgressHUD()
for item in snapshot.children {
if let child = item as? DataSnapshot {
if let dict = child.value as? NSDictionary {
self.shouldAdd = true
// filter our flagged messages
// set shouldAdd to false if flagged
// filter our blocked users
// set shouldAdd to false if blocked user
// only add if appropriate
if self.shouldAdd {
self.messageData.append(dict)
}
}
}
// reload the tableview
DispatchQueue.main.async {
self.refreshControl.endRefreshing()
self.chatRoomTableView.reloadData()
}
}
})
ОБНОВЛЕНИЕ:
Если после этого я позвоню .childAdded, то он добавит все сообщения.Я хотел бы ТОЛЬКО добавить то, что пользователь вводит после загрузки последних 100.
ОБНОВЛЕНИЕ 2:
Если я попытаюсь выполнить запрос .childAdded для запуска в конце первого запроса (который получает последние 100), я получу скачок памяти.
ОБНОВЛЕНИЕ 3: Если я использую .childAdded & .childRemoved, как я могу независимо вызывать эти вызовы против .childRemoved, вызываемого непосредственно перед .childAdded?