将child添加到节点时,不会触发observe(FIRDataEventType.value)

时间:2016-10-15 21:17:30

标签: swift firebase firebase-realtime-database

当我向节点添加新条目时,我的事件侦听器没有触发,即使应该这样做。 如果我手动更新节点中的条目,则在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上。但是,我从不分离听众。

0 个答案:

没有答案