我试过谷歌搜索这个问题,但似乎每个人都有相反的问题,即应用程序在模拟器上运行,但不是他们的设备。我整个星期都在苦苦挣扎,firebase异步调用返回null并将问题链接到启用持久性。如果我禁用持久性,我的所有问题都会消失,但我希望它能够启用。我最近了解了不同侦听器/持久性的同步问题,并且一直在努力使firebase返回过时/零值。
模拟器在一两周前工作,我不确定是什么改变了。我已经尝试搞乱/切换.observeSingleEvent for .observe并且仍然在此代码崩溃:
let synced = ref.child("profiles").child((FIRAuth.auth()?.currentUser?.uid)!).child("level")
synced.observeSingleEvent(of: FIRDataEventType.value, with: { (snapshot) in
print(snapshot)
print(snapshot.ref)
if (snapshot.value as! String == "One") {
........//CRASH
显示消息:
无法转换类型的值' NSNull' (0x10b7cf8c8)到' NSString' (0x10a9dfc40)。
当我尝试打印快照时,它会显示一个空快照。但是当我打印引用时,链接工作并将我带到我的数据库中的正确位置(我可以看到数据存在)
如何在不禁用持久性的情况下修复/解决这个问题?或者更重要的是,我想,如果它在设备上工作,我是否应该关心它在模拟器中不起作用?对于应用商店的批准/影响未来用户,这是否重要?
答案 0 :(得分:1)
错误似乎相当明确:没有值,因此您无法将其转换为字符串。
synced.observeSingleEvent(of: FIRDataEventType.value, with: { (snapshot) in
if (snapshot.exists()) {
if (snapshot.value as! String == "One") {
........//CRASH