iOS Firebase-在模拟器中崩溃,但不在具有持久性的设备中

iOS Firebase-在模拟器中崩溃,但不在具有持久性的设备中,ios,swift,firebase,firebase-realtime-database,Ios,Swift,Firebase,Firebase Realtime Database,我试着用谷歌搜索这个问题,但似乎每个人都有相反的问题,应用程序运行在模拟器上,而不是他们的设备上。一周来,我一直在为firebase异步调用返回null并将问题与启用持久性联系在一起而苦苦挣扎。如果禁用持久性,我的所有问题都会消失,但我希望它能够启用。我最近了解到不同侦听器/持久性的同步问题,并且在firebase返回过时的/nil值的问题上挣扎了一段时间 模拟器在一两周前还在工作,我不知道发生了什么变化。我已尝试处理/关闭.observeSingleEvent for.observeSingl

我试着用谷歌搜索这个问题,但似乎每个人都有相反的问题,应用程序运行在模拟器上,而不是他们的设备上。一周来,我一直在为firebase异步调用返回null并将问题与启用持久性联系在一起而苦苦挣扎。如果禁用持久性,我的所有问题都会消失,但我希望它能够启用。我最近了解到不同侦听器/持久性的同步问题,并且在firebase返回过时的/nil值的问题上挣扎了一段时间

模拟器在一两周前还在工作,我不知道发生了什么变化。我已尝试处理/关闭.observeSingleEvent for.observeSingleEvent,但仍在以下代码下崩溃:

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)

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

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

如果您想亲眼看到,当引用存在时,firebase会获得一个nil/过时值,下面是我在跟踪打印的ref链接时看到的内容

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

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

显示您的firbase结构否,我的意思是,值是一个字符串,有一个值,我可以在数据库中看到它。我确信它在我的数据库中指向正确的位置,并且包含一个字符串值。问题是firebase认为快照为零。这与侦听器/持久性有关,本文对此进行了解释:如果您没有获得预期的值,那么它很可能将缓存的位置(在磁盘或内存中)设置为nil。你的代码需要处理这个问题。本周我已经说过几次了:使用磁盘持久性和单值事件侦听器/观察器不能混用。有关更详细的解释,请参见“谢谢”,我确实看到了解释,但是当我将此调用切换到“.observe(FIRDataEventType.value)”而不是single时,崩溃仍然发生。我还尝试在没有运气的情况下向synced.keepSynched(true)添加一个调用。在连接侦听器之前,我尝试将调用放入synced.keepSynched(true)并在侦听器中。我还缺什么吗?再次感谢您的帮助,非常感谢。缓存中仍有一个
nil
。请参阅我共享的代码片段以正确处理该问题。