2017-06-15 16 views
1

firebaseデータ構造は、私は、FMイベントに行くすべてのユーザーを見つけたいがFirebaseデータベースに参加

{ 
    "eventAttendees" : { 
    "fm" : { 
     "1" : "David", 
     "2" : "Alice" 

    } 
    }, 
    "events" : { 
    "fm" : { 
     "date" : "2017-06-16", 
     "name" : "Firebase Meetup" 
    }, 
    "gm" : { 
     "date" : "2017-08-12", 
     "name" : "Meet Linh" 
    } 
    }, 
    "users" : { 
    "1" : { 
     "email" : "[email protected]", 
     "name" : "David" 
    }, 
    "2" : { 
     "email" : "[email protected]", 
     "name" : "Alice" 
    }, 
    "10" : { 
     "email" : "[email protected]", 
     "name" : "Khanh" 
    } 
    } 
} 

です。 ref.child("users/\(snapshot.key)")ref.child("users/1")

しかし、私の上になるように、私はこのチュートリアルhttps://youtu.be/Idu9EJPSxiY?t=3m14sに従って、チュートリアルsnapshot.key

ベースは "1" を返す必要があります

let ref = Database.database().reference() 
ref.child("eventAttendees/fm").observe(.value, with: { (snapshot) in 
      print (snapshot.key) 
      ref.child("users/\(snapshot.key)").observeSingleEvent(of: .value, with: { (userSnapshot) in 
       let content = userSnapshot.value as? [String : AnyObject] ?? [:] 
       print(content) 
      }) 
     }) 

"2":ここに私のコードですコード、snapshot.key返信 "fm"、ref.child("users/\(snapshot.key)")ref.child("users/fm")

私のコードのどこに問題がありますか?

答えて

3

eventAttendees/fmの下には複数の子供がいます。したがって、コード内の子ノードをループする必要があります。

let ref = Database.database().reference() 
ref.child("eventAttendees/fm").observe(.value, with: { (snapshot) in 
    for child in snapshot.children.allObjects as [FIRDataSnapshot] { 
     print (child.key) 
     ref.child("users/\(child.key)").observeSingleEvent(of: .value, with: { (userSnapshot) in 
      let content = userSnapshot.value as? [String : AnyObject] ?? [:] 
      print(content["name"]) 
     }) 
    } 
}) 
+0

ありがとうございました!ビデオチュートリアルでは、作者がループする必要はありません。私は何か見落としてますか? – John

+1

ビデオでDavidは外側のループに 'on(" child_added "'を使用します。これは各子のために別々のイベントを発生させます。コールバック関数をループする必要があります。 –

関連する問題