1
一切正常,直到用户注销并再次登录。似乎Firebase观察方法被称为两次。我试图在viewDidDisssaper
中使用removeAllObservers
,并用句柄移除Observer,但它没有帮助。我仍然得到重复的数据。我还能尝试什么?也许我的查询是错误的?但随后它会显示错误的结果在一开始..用户再次登录后重复数组中的数据Firebase观察方法
这里是我使用的是什么:
let ref = FIRDatabase.database().reference().child("Recent")
func observeRecent() {
ref.queryOrdered(byChild: "sender_id").queryEqual(toValue: senderId()).observe(.value, with: { snapshot in
Chats_VC.activeConversations.removeAll()
for snap in snapshot.value as? [String: AnyObject] ?? [:] {
let data = FIRDatabase.database().reference().child("Recent").child(snap.key)
data.observeSingleEvent(of: .value, with: { snapshot in
let dict = snapshot.value as? [String: AnyObject] ?? [:]
let activeSnapshot = Recent()
//....
Chats_VC.activeConversations.append(activeSnapshot)
self.tableView.reloadData()
})
}
})
}
@Hibernia似乎有一个类似的问题,你http://stackoverflow.com/questions/40699325/firebase-observer-code-running-twice-after-leaving-查看 就像我在那里发表评论,我不知道这是否可以帮助你,但我遭受了这种重复,而且因为'.value'。有了一个听众,它在开始时被调用,然后每次我添加一些数据,再次... – Anfuca
嗯,我需要那个.value,因为我正在观察对话中的最后一条消息。 –
如果您只想检索添加的每个新请求的数据,请尝试'child_added'而不是'value'。 – Anfuca