当我发送一条消息时,它会多次从Firebase获取数据
我的聊天不能正常工作当我发送一条新消息并在tableview上显示时,我多次收到消息
函数getChatData(){
//self.getData = []
ref.child("Chats").observe(.value) { (snapshot) in
if let snapshot = snapshot.children.allObjects as? [DataSnapshot]{
for item in snapshot{
if let postData = item.value as? [String: Any]{
let message = postData["message"]as? String
let orderid = postData["orderid"]as? Int
let receiver = postData["receiver"]as? String
let receiverUid = postData["receiverUid"]as? String
let sender = postData["sender"]as? String
let senderUid = postData["senderUid"]as? Int
let timestamp = postData["timestamp"]as? String
if self.orderId == orderid{
//self.getData.removeAll()
self.getData.append(GetChat(message: message ?? "", orderid: orderid ?? 0, receiver: receiver ?? "", receiverUid: receiverUid ?? "", sender: sender ?? "", senderUid: senderUid ?? 0, timestamp: timestamp ?? ""))
}
}
}
self.tableView.reloadData()
//self.tableView.reloadInputViews()
}发布于 2020-11-12 00:15:42
根据您从数据库读取数据的方式,每次调用snapshot时,它都将在Chats下包含整个数据。
有两个选项可以防止在UI中显示重复数据:
.child***事件,而不是.value。这样做意味着(假设添加了一条消息)仅使用新message.snapshot调用您的.childAdded观察器,您可以在每次从数据库获取数据时清空您的getData。这可能会导致UI更新中出现一些闪动,但这是对当前代码的最小更改。为此,只需在for item in snapshot{.之前添加self.getData = []
https://stackoverflow.com/questions/64786250
复制相似问题