leo*_*loo 11 ios firebase swift firebase-realtime-database
有没有人有运气使用该功能:
.queryEqualToValue(value: AnyObject?, childKey: String?)
Run Code Online (Sandbox Code Playgroud)
两件事情:
1)childKey似乎不允许深路径,只是直接的孩子
2)我根本无法工作!鉴于我的结构:
"post": {
"groupName": "hello world"
}
Run Code Online (Sandbox Code Playgroud)
如果我做一个简单的事:
postRef.queryEqualToValue("hello world", childKey: "groupName").observeSingleEvent( ... )
Run Code Online (Sandbox Code Playgroud)
它根本不会返回任何帖子.相反,我必须采取以下方式:
postRef.queryOrderedByChild("groupName").queryEqualToValue("hello world").observeSingleEvent( ... )
Run Code Online (Sandbox Code Playgroud)
让它工作!
我是否错误地使用了上述功能?
Xcode 7.2.1
Swift 2.1.1
iOS 9.2
OSX 10.10.5
2)我根本无法工作!鉴于我的结构:
Run Code Online (Sandbox Code Playgroud)"post": { "groupName": "hello world" }如果我做一个简单的事:
Run Code Online (Sandbox Code Playgroud)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";
})
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
(/post {
en = userId;
ep = "hello world";
sn = userId;
sp = "hello world";
})
Run Code Online (Sandbox Code Playgroud)
但是,我无法让观察者工作 - 他们肯定不像文档所说的那样工作.
我在运行应用之前删除了Firebase上的所有数据.
编辑:好的,我想我知道观察员发生了什么.根据检索数据部分:
通过将异步侦听器附加到
FIRDatabase引用FIRDatabaseReference 来检索Firebase数据 .对于数据的初始状态,监听器被触发一次,并且在数据改变的任何时候再次触发监听器.
当我尝试观察查询时,回调中的快照中没有任何数据.另一方面,当我观察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")
}
Run Code Online (Sandbox Code Playgroud)
然后回调中的快照中有数据,我得到这个输出:
Snap (post) {
groupName = {
userId = "hello world";
};
}
Snap (post) {
groupName = {
userId = "goodbye Mars";
};
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我观察FIRDatabaseQuery:
let postRef = dbRef.child("post")
let query = postRef.queryEqualToValue("hello world", childKey: "userID")
query.observeEventType(.Value, withBlock: { (snapshot) -> Void in
print(snapshot)
})
Run Code Online (Sandbox Code Playgroud)
然后输出是:
Snap (post) <null>
Run Code Online (Sandbox Code Playgroud)
以下内容写在Firebase文档中:
queryEqualToValue返回等于指定键,值或优先级的项,具体取决于所选的order-by方法.
重要的是:"取决于所选择的顺序方法."
因此,请确保将queryEqualToValue -Method与orderBy -Method结合使用.
例如:
let groupState = "open"
ref.child("groups").queryOrdered(byChild:"state").queryEqual(toValue:groupState).observe(enventType: .value, with: { snapshot in
// Returns all groups with state "open"
for group in snapshot.children {
print(group)
}
})
Run Code Online (Sandbox Code Playgroud)
PS:新的Firebase iOS指南中未提及带有childKey的变体.
| 归档时间: |
|
| 查看次数: |
9213 次 |
| 最近记录: |