【发布时间】: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/… -
是的,这就是我最终做的 :) 谢谢!