Firebase iOS设置优先级没有更新查询
问题描述:
我正在正确观察iOS库中的Firebase查询时遇到问题。只有在更新同一客户端上的优先级时才会出现此问题。下面是一个测试案例来演示我遇到的问题。Firebase iOS设置优先级没有更新查询
我想观察特定优先级的孩子数。 countLabel
只显示优先级为“1”的孩子的数量。有一个按钮触发changePriority()
使新孩子的优先级为“2”。我期望countLabel
显示0(或递减到正确的数字),但它不会更新。
class ViewController: UIViewController {
let firebaseRoot = Firebase(url: "url goes here")
var newChild: Firebase?
@IBOutlet weak var countLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
firebaseRoot.queryEqualToPriority("one").observeEventType(FEventType.Value, withBlock: { (snapshot: FDataSnapshot!) -> Void in
self.countLabel.text = snapshot.childrenCount.description
})
newChild = firebaseRoot.childByAutoId()
newChild?.setValue(true, andPriority: "one")
}
@IBAction func changePriority() {
newChild?.setPriority("two", withCompletionBlock: { (error: NSError?, firebase: Firebase!) -> Void in
if (error == nil) {
NSLog("Priority updated to `two`")
} else {
NSLog("Error updating priority: %@", error!)
}
})
}
}
重要的是,如果我改变使用其他客户端(或火神)那个孩子的优先级,查询观察者正确响应,并countLabel
会显示正确的号码。
答
看起来这是Firebase iOS SDK中的一个错误。感谢您将它引入我们的注意!幸运的是,我们实际上正在修改我们的查询支持,并且目前有一个beta SDK,除了具有新功能外,它还修复了这个错误。如果你想给它一个镜头,退房http://www.firebase.com/docs/beta/queries
否则,如果你等了几个星期,这些功能(和错误修复)将使它进入发布SDKs。
您尚未在此处声明任何错误处理程序或回调以查看操作是否成功。客户端操作似乎很可能无法更新优先级。 – Kato 2014-10-27 17:25:09
@Kato,我一直在使用[Vulcan](https://github.com/firebase/vulcan)来验证客户端代码是否正确地更新了服务器。此外,根据[Firebase活动保证](https://www.firebase.com/docs/ios/guide/retrieving-data.html#section-guarantees),即使服务器已经启动,听众似乎也应该启动尚未更新。我认为这可能是iOS客户端的一个漏洞,并且已经提交给Firebase支持。 – Brad 2014-10-27 18:03:52
@Kato我更新了示例代码,以便在更新优先级时使用完成块。完成块被调用时没有错误,并且我仍然遇到同样的问题。 – Brad 2014-10-27 22:46:23