2017-07-18 10 views
1

Firebaseデータベースに「ユーザー」ノードがあります。その中の各ユーザーには、uidが付いたルートがあります。各ユーザーのプロパティの1つは「座標」です。私はすべてのユーザーの座標の変化を観察したい。座標Swiftの複数のノードでFirebaseの子値の変更をどのように観察できますか?

  • abcdefghijklmnop

    • ユーザー

      • usersDatabaseReference.child("*").child("coordinates").observe(.value, with: { (snapshot) in 
        

        私の構造は次のようになります。私はほとんどのようなものを必要とする "12.345,12.345"

      • 他の小道具

    • qrstuvwxyz

      • 座標: "34.567,34.567"

      • 他の小道具

だから私は、座標値が変更されるすべてのユーザーのグローバル通知を探しています。

私のuserDatabaseReference内のすべての子をループし、それぞれのオブザーバーを設定する必要がありますか?ユーザーが追加されたり削除されたりするたびに、再度設定してください。

なぜワイルドカードを使用したいのか分かります。私はこれにどのようにアプローチすべきですか?

答えて

4

あなたはちょうどその、全体としてユーザーの構造を観察する座標かどうかを判断するためにスナップショットを使用することができますが変更された要素である

usersDatabaseReference.child("users").observe(.childChanged, with: { (snapshot) in 
     //Determine if coordinate has changed 
}) 

あなたもです何ができるか:

func observeChildAdded(){ 
    usersDatabaseReference.child("users").observe(.childAdded, with: { (snapshot) in 
     //Get the id of the new user added 
     let id = "123" 
     self.usersDatabaseReference.child("users").child(id).observe(.childChanged, with: { (snapshot) in 
      self.foundSnapshot(snapshot) 
     }) 
    }) 
} 

func foundSnapshot(_ snapshot: DataSnapshot){ 
    let idChanged = snapshot.key 
    //Process new coordinates 
} 

新しい子を追加するたびに自動的にオブザーバが設定されますが、それらはすべて同じ関数にプッシュされます。スナップショット

+0

私は投稿後すぐにこのルートを開始しましたd。座標値が変更された要素であるかどうかを知るにはどうすればよいですか(値はアプリ内で最後に知られていなくてもかまいません)。 –

+0

もう1つ考えてみてください。 – Jay

+0

私は最初のアプローチが私のために働き、オブザーバーを各ユーザーに割り当てるのではなくきれいに感じると思います。ありがとう! –

関連する問題