我在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 - 就像现在一样,这也会导致无限的打印语句循环......