当我向节点添加新条目时,我的事件侦听器没有触发,即使应该这样做。 如果我手动更新节点中的条目,则在Firebase控制台中,侦听器会正确触发。
func getMeetMedia(_ callBack: @escaping ([MeetMedia]) -> ()) {
let media48HourQuery = meetMediaUserRef
.queryOrdered(byChild: "timestamp")
.queryStarting(atValue: startTime)
.queryEnding(atValue: endTime)
media48HourQuery.observe(FIRDataEventType.value, with: { snapshot in
var fetchedMeetMedia = [MeetMedia]()
let snapDic = snapshot.value as? NSDictionary
if snapDic != nil {
var counter = 0
for child in snapDic! {
let childDic = child.value as? NSDictionary
let title = childDic?["title"] as? String
let mediaID = childDic?["mediaID"] as? String
let timestamp = childDic?["timestamp"] as? Double
let fromUserID = childDic?["fromUserID"] as? String
let toUserID = childDic?["toUserID"] as? String
let mediaType = childDic?["mediaType"] as? String
let unread = childDic?["unread"] as? Bool
let newMeetMedia = MeetMedia(fromUserID: fromUserID!, mediaID: mediaID!, mediaType: mediaType!, timestamp: timestamp!, title: title!, toUserID: toUserID!, unread: unread!)
fetchedMeetMedia.append(newMeetMedia)
if unread == true {
counter += 1
}
}
callBack(fetchedMeetMedia)
unreadMeetMediaCount = counter
}
})
}
要添加新条目,我正在使用它:
let newVideoPostChild = meetMediaUserRef.child(mediaID)
newVideoPostChild.setValue(newVideoPost)
对于后台上下文,我正在为各种节点实现未读的全局侦听器:true。 新添加的条目具有未读的:true设置,因此未读计数需要递增,但监听器不会触发。
我确实通过使用计时器并每隔几秒查询一次firebase数据库来完成这项工作,但我不需要这样做,因为监听器应该是持久的..
另外,我首先启动了HomeVC中的监听器。 当我在我的应用程序中向该节点添加新条目时,我不在HomeVC上,我在另一个VC上。但是,我从不分离听众。