のXcode 7.2.1
スウィフト2.1.1
のiOS 9.2
OSX 10.10.5
2)私はそれがすべてで動作させることはできません!私の構造を考える:
"post": {
"groupName": "hello world"
}
私は、簡単な操作を行う場合は、次の
import UIKit
import Firebase
class ViewController: UIViewController {
var dbRef: FIRDatabaseReference!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
dbRef = FIRDatabase.database().reference()
dbRef.child("post").child("groupName").setValue("hello world")
let postRef = dbRef.child("post")
print(postRef)
let query = postRef.queryEqualToValue("hello world", childKey: "groupName")
print(query)
--output:--
(/post {
en = groupName;
ep = "hello world";
sn = groupName;
sp = "hello world";
})
1)childKey:
postRef.queryEqualToValue("hello world", childKey: "groupName")
postRef.queryEqualToValue("hello world", childKey: "groupName").observeSingleEvent(...)
私は正常に次のコードでクエリを取得することができます深い道を許可していないようです。ただちに 子供
私はそれを見ていません。私は自分のコードを変更する場合:
import UIKit
import Firebase
class ViewController: UIViewController {
var dbRef: FIRDatabaseReference!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
dbRef = FIRDatabase.database().reference()
dbRef.child("post").child("groupName").child("userId").setValue("hello world")
let postRef = dbRef.child("post")
print(postRef)
let query = postRef.queryEqualToValue("hello world", childKey: "userId")
print(query)
私は、次のような出力が得られます。
(/post {
en = userId;
ep = "hello world";
sn = userId;
sp = "hello world";
})
しかし、私はオブザーバーが仕事を得ることができない - ドキュメントは、彼らが言うように、彼らは確かに動作しません。 。
私は、アプリケーションを実行する前にFirebaseのすべてのデータを削除します。
を編集してください。さて、私の観察者と何が起こっているのか分かりました。 Retrieve Dataセクションによれば:
Firebaseデータは
FIRDatabase参照
FIRDatabaseReferenceに非同期リスナーを取り付けることによって取り出されます。リスナは、データの最初の 状態に対して1回トリガされ、データが変更されると再びトリガされます。
クエリを実行しようとすると、コールバックのスナップショットにはデータが含まれません。一方、私がFirDatabaseReference
を観察すると、オブザーバーは私が期待するように(多少)働いています。私はこのようなFIRDatabaseReferenceを観察する場合たとえば
は、:
import UIKit
import Firebase
class ViewController: UIViewController {
var dbRef: FIRDatabaseReference!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
dbRef = FIRDatabase.database().reference()
dbRef.child("post").child("groupName").child("userId").setValue("hello world")
let postRef = dbRef.child("post")
postRef.observeEventType(.Value, withBlock: { (snapshot) -> Void in
print(snapshot)
})
sleep(1) //Allow the observer (in another thread) to execute before the following line:
dbRef.child("post").child("groupName").child("userId").setValue("goodbye Mars")
}
その後、コールバックでのスナップショットは、その中にデータを持っている、と私はこの出力を得る:
Snap (post) {
groupName = {
userId = "hello world";
};
}
Snap (post) {
groupName = {
userId = "goodbye Mars";
};
}
しかし、私は観察する場合FIRDatabaseQuery:
let postRef = dbRef.child("post")
let query = postRef.queryEqualToValue("hello world", childKey: "userID")
query.observeEventType(.Value, withBlock: { (snapshot) -> Void in
print(snapshot)
})
、出力は次のようになります。
Snap (post) <null>
最後のスニペットが正しいように見えます。最初のスニペットは常に人々のトラブルを引き起こしているので、私はそれを無視する傾向があります。 –
私は 'queryOrderedByChild(" ")。queryEqualToValue(" ")'をすべて得ることができません! – Learn2Code