iOS Firebase - 模拟器崩溃,但没有持久性设备

时间:2017-02-25 04:51:18

标签: ios swift firebase firebase-realtime-database

我试过谷歌搜索这个问题,但似乎每个人都有相反的问题,即应用程序在模拟器上运行,但不是他们的设备。我整个星期都在苦苦挣扎,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)。

当我尝试打印快照时,它会显示一个空快照。但是当我打印引用时,链接工作并将我带到我的数据库中的正确位置(我可以看到数据存在)

如何在不禁用持久性的情况下修复/解决这个问题?或者更重要的是,我想,如果它在设备上工作,我是否应该关心它在模拟器中不起作用?对于应用商店的批准/影响未来用户,这是否重要?

如果您想亲自了解这是firebase在引用存在时获取nil /过时值的问题,这是我在关注打印的ref链接时看到的内容 enter image description here

1 个答案:

答案 0 :(得分:1)

错误似乎相当明确:没有值,因此您无法将其转换为字符串。

synced.observeSingleEvent(of: FIRDataEventType.value, with: { (snapshot) in
    if (snapshot.exists()) {
        if (snapshot.value as! String == "One") {
         ........//CRASH