如何防止tableView多次重载数据? -迅捷

时间:2019-12-18 00:37:58

标签: ios swift firebase uitableview firebase-realtime-database

因此,我面临方法tableView.reloadData()被触发太多次的问题,tableView显示重复数据。当我尝试从Firebase数据库获取数据时,会出现此问题。

Img

这是我正在使用的代码:

// This method gets userId of all users that communicated with the current user.

    func observeMessageIds(){
       let nodeRef = Database.database().reference().child("message-Ids").child(CurrentUser.uid)
       nodeRef.observe(.childAdded) { (snap) in
       if !self.friendsList.contains(snap.key) { return }
       let userMRef = Database.database().reference().child("message-Ids").child(CurrentUser.uid).child(snap.key)
       userMRef.observe(.childAdded) { (userSnap) in
         self.messagesReference(userSnap.key)
       }
    }
 }

// This method filters each user with their own messages.

    func messagesReference(_ key: String){
        Database.database().reference().child("messages").child(key).observe(.value) { (snapshot) in
            guard let values = snapshot.value as? [String: Any] else { return }
            self.loadMessagesHandler(values)
        }
    }


// This method populates the messages array which populates the tableView.

    func loadMessagesHandler(_ values: [String: Any]) {
        let message = Messages()
        message.sender = values["sender"] as? String
        message.recipient = values["recipient"] as? String
        message.message = values["message"] as? String
        message.time = values["time"] as? NSNumber
        message.mediaUrl = values["mediaUrl"] as? String
        let user = message.determineUser()
       // recentMessages dict populates the message array only with recent messages.
        recentMessages[user] = message
        messages = Array(recentMessages.values)
        messages.sort { (message1, message2) -> Bool in
            return message1.time.intValue > message2.time.intValue
        }
        tableView.reloadData()
     }

我尝试使用计时器重新加载数据,但不幸的是,仅当您具有良好的Internet连接时,它才有效。

self.timer.invalidate()
self.timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(self.handleReload), userInfo: nil, repeats: false)

我尝试在数据库参考上使用queryLimit(toLast: 1)仅获取最新消息,但是这在我的ChatVC中创建了更多错误。 Github仓库:https://github.com/realpaliy/mChat/blob/master/mChat/Controllers/Chats/ConversationsVC.swift

0 个答案:

没有答案