如何在Firebase中获取现有和新孩子的结果?

时间:2016-04-18 00:07:45

标签: ios swift firebase firebase-realtime-database

我正在尝试在Firebase中为我的swift iOS应用创建一个查询。我对查询的问题是它不会立即从firebase获取坐标,除非它们被更改。我尝试了其他所有观察者类型,但似乎都没有。我知道我目前有观察者类型需要更改,但我需要正确的方法让它在加载应用程序后立即获取位置,并使用firebase进行更新。 .childAdded会立即获取位置,但在Firebase上更改它们时不会更新。

userDirectory.queryOrderedByChild("receiveJobRequest")
             .queryEqualToValue(1)
             .observeEventType(.ChildChanged  , withBlock: {snapshot in
        var cIhelperslatitude = snapshot.value["currentLatitude"]
        var cIhelperslongitude = snapshot.value["currentLongitude"]

1 个答案:

答案 0 :(得分:1)

如果您想要收听多种事件类型,则需要注册多个侦听器。

let query = userDirectory.queryOrderedByChild("receiveJobRequest")
                         .queryEqualToValue(1)

query.observeEventType(.ChildAdded, withBlock: {snapshot in
    var cIhelperslatitude = snapshot.value["currentLatitude"]
    var cIhelperslongitude = snapshot.value["currentLongitude"]

query.observeEventType(.ChildChanged, withBlock: {snapshot in
    var cIhelperslatitude = snapshot.value["currentLatitude"]
    var cIhelperslongitude = snapshot.value["currentLongitude"]

您可能希望将该公共代码重构为方法,并从.ChildAdded.ChildChanged块调用。

或者,您可以注册.Value事件,每次更改查询下的值时,会触发初始值。但是,由于.Value与所有匹配的子项一起调用,因此您必须循环遍历块中的子项:

query.observeEventType(.Value, withBlock: {allsnapshot in
    for snapshot in allsnapshot.children {
        var cIhelperslatitude = snapshot.value["currentLatitude"]
        var cIhelperslongitude = snapshot.value["currentLongitude"]
    }