我正在编写聊天应用程序。我想在observe-function:
之后更新tableViewController覆盖func viewWillAppear(_ animated:Bool){ super.viewWillAppear(动画)
Api.Message.observeStaticUserDiscussion(toId: self.user!.id!) { (message, messageId, currentId) in
if message.notViewed! && currentId != message.fromId {
Api.Message.updateMessageStatus(withMessage: messageId, value: false)
}
}
// THIS LINE
self.delegate?.updateMenuMessage()
}
我的代码非常简单,我检查是否读取了消息,如果没有看到消息,我会更新每个消息的状态。
然后,我可以更新tableViewController(主页,显示所有用户的消息)。
如果我包含此行
self.delegate?.updateMenuMessage()
之后
Api.Message.updateMessageStatus(withMessage: messageId, value: false)
它正常工作,但tableView重新加载了很多次......
我希望有这样的代码:
这可能吗?
答案 0 :(得分:1)
尝试这种方法。
添加观察者:
func getNewMessage(completion: @escaping ([String : AnyObject]) -> Void) {
let messagesRef: DatabaseReference = ref.child("chat").child("messages")
messagesRef.observe(.childAdded, with: { (snapshot) in
guard let snapshotValue = snapshot.value as? [String: AnyObject] else {
return
}
completion(snapshotValue)
}, withCancel: nil)
}
用法:
getNewMessage { (message) in
addNewMessageToArray(message)
self.updateMenuMessage()
}