2016-04-18 5 views
0

私は迅速なiOSアプリケーションのためにFirebaseでクエリを作成しようとしています。私がクエリで抱えている問題は、それらが変更されない限り、直ちにfirebaseから座標を取得しないということです。他のすべてのオブザーバータイプを試しましたが、動作するようには見えません。私は現在、オブザーバータイプを変更することができますが、アプリがロードされるとすぐに位置を取得し、firebaseで更新するための正しい方法が必要です。 .childAddedは直ちに場所を取得しますが、Firebaseで変更された場合は更新されません。Firebaseの既存の子と新しい子の両方でどのように結果を得ることができますか?

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

答えて

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イベントに登録することもできます。

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

query.observeEventType(*することになっていることをされている値*解答の第二部で:。.Valueが一致するすべての子供たちと一緒に呼び出されているのでしかし、あなたは、あなたのブロックの子供たちをループをする必要があります? – Jay

+0

いいキャッチ。修正済み! –