我的应用程序有多个使用 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,我怎么能独立调用那些vs .childRemoved之前调用.childAdded?