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会显示正确的号码。

+0

您尚未在此处声明任何错误处理程序或回调以查看操作是否成功。客户端操作似乎很可能无法更新优先级。 – Kato 2014-10-27 17:25:09

+0

@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

+0

@Kato我更新了示例代码,以便在更新优先级时使用完成块。完成块被调用时没有错误,并且我仍然遇到同样的问题。 – Brad 2014-10-27 22:46:23

看起来这是Firebase iOS SDK中的一个错误。感谢您将它引入我们的注意!幸运的是,我们实际上正在修改我们的查询支持,并且目前有一个beta SDK,除了具有新功能外,它还修复了这个错误。如果你想给它一个镜头,退房http://www.firebase.com/docs/beta/queries

否则,如果你等了几个星期,这些功能(和错误修复)将使它进入发布SDKs。