2017-08-29 6 views
0

新しいノードをFirebase Realtime Databaseに追加するときにいくつか問題があります。私は子供を追加するときに私はいくつかのデータを取得しますが、問題は私がキーと1の値を取得することですが、合計2つの値があります。Childaddedが1つのキーを取得します

私は、次の構造を有する:

-- groups 
    -- id 
     -- members 
     -- id 
      --device_name 
      --device_type 

私はメンバーの子を観察します。そして、その子が追加されたときにidとunderlaying要素(device_name、device_type)を取得したいと思います。

let ref = Database.database().reference().child("groups").child(roomObject.getAutoChildId()).child("members"); 
    ref.observe(.childAdded, with: { (snapshot) in 
    print(snapshot.debugDescription) 
}) 

しかし、今問題:

私はこのコードでそれを行います。 snapshot.debugDescriptionは、そのスナップショット内のすべての値を返しません。例:

Snap (ooDpijaPrKgcBA70LUXYbpohvi42) { 
    "device_name" = test; 
} 

device_typeキーは存在せず、理由はわかりません。私はこれを必要とする:

Snap (ooDpijaPrKgcBA70LUXYbpohvi42) { 
    "device_name" = test; 
    "device_type" = test; 
} 

は、構造を追加しました:

enter image description here

+0

firebaseデータベースのスクリーンショットを表示できますか? – 3stud1ant3

+0

@ 3stud1ant3私はスクリーンショットを追加しました。 – da1lbi3

+0

印刷物(スナップショット)を追加した場合には、その出力は何ですか? – 3stud1ant3

答えて

2

間違って何が起こっていたか、私を発見しました。 .childAddedとは関係ありません。その部分は正常に動作しています。

挿入時に間違っています。私がやったことは以下の通りであった:

let insertRef = reference.child("groups").child(roomKey).child("members").child(roomCodeArray[1]) 
    insertRef.child("device_name").setValue(roomCodeArray[2]) 
    insertRef.child("device_type").setValue(roomCodeArray[3]) 

しかしfirebaseは、デバイス名が挿入されたときに、他のデバイスがonchildChangedイベントを取得することに速いのでfreakinのです。その時点でデバイスタイプは追加されません。

私のソリューション:

let childInsert = [ 
        "device_name" : roomCodeArray[2], 
        "device_type" : roomCodeArray[3] 
        ] 

insertRef.setValue(childInsert) 

同時に値を挿入します。そしてそれは魔法のように機能します。

関連する問題