首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FirebaseChat Swift4

FirebaseChat Swift4
EN

Stack Overflow用户
提问于 2020-11-11 20:14:31
回答 1查看 24关注 0票数 0

当我发送一条消息时,它会多次从Firebase获取数据

我的聊天不能正常工作当我发送一条新消息并在tableview上显示时,我多次收到消息

函数getChatData(){

代码语言:javascript
复制
    //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()
        }
EN

回答 1

Stack Overflow用户

发布于 2020-11-12 00:15:42

根据您从数据库读取数据的方式,每次调用snapshot时,它都将在Chats下包含整个数据。

有两个选项可以防止在UI中显示重复数据:

  1. 侦听.child***事件,而不是.value。这样做意味着(假设添加了一条消息)仅使用新message.
  2. Alternatively的snapshot调用您的.childAdded观察器,您可以在每次从数据库获取数据时清空您的getData。这可能会导致UI更新中出现一些闪动,但这是对当前代码的最小更改。为此,只需在for item in snapshot{.

之前添加self.getData = []

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64786250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档