将Firebase侦听器附加到tableViewCell

时间:2017-08-29 20:04:20

标签: ios swift firebase firebase-realtime-database

我在iOS应用中有聊天功能。聊天预览显示在tableView中,我正在使用TableView单元格本身的类。我想收听新消息,这样我就可以发布一条新消息"细胞上的标签。 tableView Cell的相关部分是:

    var chat: Chat! {
    didSet {
        self.updateUI()
        self.observeNewMessages()
    }
    }

    extension ChatTableViewCell {

        func observeNewMessages() {

        let chatMessageIdsRef = chat.ref.child("messageIds")  
        chatMessageIdsRef.observe(.childAdded, with: { snapshot in

        let messageId = snapshot.value as! String
        DatabaseReference.messages.reference().child(messageId).observe(.childAdded, with: { snapshot in
            //let message = Message(dictionary: snapshot.value as! [String : Any])


            print("looks like there is a new message") //works
            self.messageLabel.text = "New Message!"
            //self.delegate?.newMessage()
        })
        })
        }
    }

print语句用于测试监听器。我遇到的问题是当表视图加载并创建单元格时,observeNewMessages()正在执行print语句,无论是否有新消息。它只是在读那些已经存在的旧孩子了吗?显然,这将导致消息标签始终读取"新消息。"我对Firebase不太好,所以有更好的Firebase功能可以使用或更好的方法吗?

*我正在使用2个查询,因为Message字典将允许我查看当前用户是否发出了消息。委托就在那里,因为我的下一步是重新加载tableview - 就像现在一样,这也会导致无限的打印语句循环......

0 个答案:

没有答案