我的应用具有使用Swift
和Firebase
构建的多个聊天室。
其中一些房间可能会有几百条消息,而更受欢迎的房间可能有超过10,000条消息。
我正在使用查询将其限制为最后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之前的那些?