【发布时间】:2017-05-15 08:45:00
【问题描述】:
我在带有 Swift 3 的 iOS 上使用 Firebase。
当我使用时
FIRDatabase.database().reference().child("child").setValue("value") {
(error: Error?, databaseReference: FIRDatabaseReference) in
print("Error while setting value \(error)")
}
应用程序在运行时崩溃并显示以下日志:
*** 由于未捕获的异常“InvalidFirebaseData”而终止应用程序,原因:“(nodeFrom:priority:) 无法存储 _SwiftValue 类型的对象 在 。只能存储 NSNumber、NSString、NSDictionary、 和 NSArray。'
我尝试使用相同的函数,但没有尾随闭包,由于某种原因,它可以工作!
FIRDatabase.database().reference().child("child").setValue("value",
withCompletionBlock: {
(error: Error?, databaseReference: FIRDatabaseReference) in
print("Error while setting value \(error)")
})
尾随闭包和 Swift 3 有什么特别之处吗?
【问题讨论】:
-
崩溃是因为您只能设置 NSNumber、NSString、NSDictionary 和 NSArray 类型的值/存储对象,而您存储的值不是任何此类类型。
-
不确定这是否是问题所在。我尝试使用 NSString 变量并将其传递给 setValue ,但它仍然会崩溃。但无论哪种情况,不使用常规 Swift String 的闭包似乎都有效。
-
@EmadToukan 您是如何在运行时获得崩溃日志的?问这个问题可能很愚蠢!
-
@AnuragSharma 在设备上运行 firebase 应用程序,您应该能够在 Xcode 控制台中看到它。
-
@EmadToukan 显然我知道这一点,但是在通过 testflight 发送构建后我遇到了崩溃。在我调试时甚至没有出现崩溃。现在解决了!我的 NSTimer 实现导致了崩溃,我从 Crashlytics 获得了这份报告。
标签: ios swift firebase swift3 firebase-realtime-database