2016-10-18 6 views
1

私はすぐにfirebaseの仕組みを理解しようとしています。例えば取る:observeSingleEventがトリガーしていません

let locationRef = FIRDatabase.database().reference(withPath: "Location") 
    print("A") 
    locationRef.observeSingleEvent(of: .value, with: { snapshot in 
     print("B") 
    }) 
    print("C") 

をfirebaseデータベースと:

{ 
    "Location" : [ { 
     "address" : "100 Foo Avenue", 
     "name" : "Foo" 
    }, { 
     "address" : "1800 Bar Street", 
     "name" : "Bar", 
    } ] 
} 

私にとっては、このコードは関係なく、私はobserveSingleEvent(OSE)または私はOSEの内側に置くを置く場所の、Bを印刷しません。 。ドキュメントに基づいて、私はoSEが実行時に一度起動し、firebaseデータベースに変更があったときに起動されると思っていましたが、起動させることはできません。以前の記事hereでは、私はそれをうまく動作させましたが、どのようにしてトリガーがどのようにトリガするかについてのいくつかの明確化がわかりません!

+0

あなたが完全であなたのポストを更新することができます最小限の関連JSON構造ですか? – Dravidian

+0

コードを実行しているユーザーにデータを読み取る権限がありますか。これを検出するには、以下を参照してください。http://stackoverflow.com/documentation/firebase/5548/how-do-i-listen-for-errors-when-accessing-the-database/24788/detect-errors-when-reading- data-on-ios#t = 201610181337593267146 –

+0

あなたのコードがうまくいけば、CがBの前に大部分の時間(常にそうではないにしても)に表示されるときには驚かないでください。 Firebaseは非同期であるため、Firebaseがサーバーからデータを返すときにのみBが発生し、Cに達するよりもはるかに時間がかかります – Jay

答えて

1

を: -

let locationRef = FIRDatabase.database().reference().queryOrdered(byChild: "Location") 
2

まず、参照を定義するときに間違っているとします。 refはFIRDatabase.database().reference().child("Location")である必要があります。

第2に、あなたの知識は難しいですが、間違っています。パスを定義した後に印刷する理由(「A」)結論として

この試してください:あなたはあなたの場所辞書上記AUTOIDまたは未知のIDを持っている場合は、この使用したいかもしれません

let locationRef = `FIRDatabase.database().reference().child("Location")` 
print("A") 
locationRef.observeSingleEvent(of: .value, with: { snapshot in 
    print(snapshot.value)//Just to show you what those prints 
    print(snapshot.allKeys)//Just to show you what those prints 
    print(snapshot.key)//Just to show you what those prints 
}) 
print("C") 
関連する問題