Ответ 1
Xcode 7.2.1
Swift 2.1.1
iOS 9.2
OSX 10.10.5
2) Я не могу заставить его работать вообще! Учитывая мою структуру:
"post": { "groupName": "hello world" }
Если я делаю простой:
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").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, похоже, не допускает глубоких путей, просто прямо дети
Я этого не вижу. Если я изменю свой код на:
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, прежде чем запускать приложение.
Изменить. Хорошо, я думаю, что знаю, что происходит с моими наблюдателями. В разделе Получить данные:
Данные Firebase извлекаются путем присоединения асинхронного прослушивателя к
Ссылка на FIRDatabaseFIRDatabaseReference. Слушатель запускается один раз для начальной состояние данных и снова в любое время при изменении данных.
Когда я пытаюсь выполнить запрос, моментальный снимок в обратном вызове не содержит никаких данных. С другой стороны, когда я наблюдаю a 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>