【问题标题】:Pausing an observeEventType Firebase暂停 observeEventType Firebase
【发布时间】:2016-06-10 22:22:57
【问题描述】:

我目前有一个 observeEventType 函数,然后在我的 iOS 应用程序中有一个 transitionBlock。它们都使用相同的 ref,导致应用在 observeEventType 处崩溃

  self.ref.child("data").child("lynes").observeEventType(FIRDataEventType.Value, withBlock: { (snapshot) in
            print(snapshot.value!)
            self.removeAll()

            var data = snapshot.value! as! [String: AnyObject]

            //Code Crashes on the line above

            for (key, value) in data {
                print("\(key) -> \(value["name"]!)")
                    dataArray.append(key)
                    locArray.append(value["location"] as! String)
                nameArray.append(value["name"] as! String)
                totalArray.append(value["total"] as! Int)
            }


            self.configureSearchController()

            print(dataArray)

            self.tableView.reloadData()


            // ...
        })

错误:无法将“NSNull”(0x10df0f600)类型的值转换为“NSDictionary”(0x10df0efe8)。

以及点击视图按钮后调用的transitionBlock:

self.ref.child("data").runTransactionBlock({ (currentData: FIRMutableData) -> FIRTransactionResult in
        if var post = currentData.value as? [String : AnyObject], let uid = FIRAuth.auth()?.currentUser?.uid {....

有没有办法让这个事件从持续监听中暂停,以观察数据的变化,而是在我的转换块完成后运行它?

【问题讨论】:

  • 在同一个引用/位置上拥有多个侦听器没有固有问题。你确定这是坠机的原因吗?你能添加足够的代码来展示吗?
  • 已添加。我觉得代码看起来有点功能失调,我仍在努力。我的过渡块看起来很混乱,这是因为这个问题 -> stackoverflow.com/questions/37738144/…
  • 好的。这就留下了代码崩溃的问题。如果您可以将其减少到仅与该崩溃相关的部分,我也会很好。
  • 异常非常明确。你得到一个空值并将其硬转换为字典。在此之前,您需要检查 if snapshot.exists()if snapshot.value is NSNull。见stackoverflow.com/questions/35882630/…
  • 是的,这就是我最终做的 :) 谢谢!

标签: swift firebase


【解决方案1】:

好的,所以我最终做的是编写一个简单的 if 语句,捕获 null 是否存在。

if let data =  snapshot.value! as? [String: AnyObject] {
                for (key, value) in data {
                    print("\(key) -> \(value["name"]!)")
                    dataArray.append(key)
                    locArray.append(value["location"] as! String)
                    nameArray.append(value["name"] as! String)
                    totalArray.append(value["total"] as! Int)
}}

当出现空错误时,这是​​一种解决方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 2016-10-17
    • 2018-12-02
    • 1970-01-01
    相关资源
    最近更新 更多