Ios ObsetveSingleEvent错误处理

Ios ObsetveSingleEvent错误处理,ios,swift,firebase,firebase-realtime-database,Ios,Swift,Firebase,Firebase Realtime Database,这是我从firebase数据库获取一些用户数据的代码。我的问题是,如果出现错误(如网络错误、请求超时、未知错误),如何获取错误?observeSingleEvent与其他(setValue、updateValue等)相比没有completionBlock 我还尝试: userRef.child(userId).observeSingleEvent(of: .value, with: { snapshot in //some codes }) 还是不会用Cancel进去。这就是你

这是我从firebase数据库获取一些用户数据的代码。我的问题是,如果出现错误(如网络错误、请求超时、未知错误),如何获取错误?observeSingleEvent与其他(setValue、updateValue等)相比没有completionBlock

我还尝试:

userRef.child(userId).observeSingleEvent(of: .value, with: { snapshot in
        //some codes
})

还是不会用Cancel进去。

这就是你要找的吗

userRef.child(userId).observeSingleEvent(of: .value, with: {(snapshot) in
    // print something
} , withCancel: {(error) in
    // print something
})
如果你在观察中犯了错误,你也可以再次检查

userRef.child(userId).observeSingleEvent(of: .value, with: { (snapshot) in
        print("Worked")           
    }) { (error) in
        print("Didn't")        
    }
就像有一个,也有一个

如果带有取消块的代码不适用于您,请更新您的问题,以显示您尝试了什么,并清楚地描述您期望的行为以及您得到的行为。

这就是我所做的

if snapshot.value is NSNull{
     //snapshot is null
} else{
     //Not null
}

每次我向数据库请求某些内容时,我都会执行此操作以检查是否已连接到数据库。如果已连接,请发出请求。如果没有,则提示警报或其他信息。但是,在他们发出请求时突然断开互联网连接,我仍然没有解决方案。

我已经尝试了第一个,并打印了错误,但什么也没有发生。我还调试了它,它没有进入打印部分。哦,好吧,如果你有像我这样的编辑答案-你得到了吗。如果你确定你的观察者正在被调用,我假设你正在启动应用程序而没有连接到互联网,那么你将不得不做两件事之一。检查你的连接:或者手动操作并检查手机是否连接到互联网。嗨,我在这里看到了你的答案()我只是用你的逻辑来解决我的这个问题。但我有一个问题需要你回答,为什么当我运行代码时,它从未连接到后来连接,即使在应用程序启动时它们已经是internet连接?
.info/connected
标志并不确定是否存在internet连接。它确定应用程序/客户端是否连接到Firebase数据库服务器。这在应用程序启动后需要一段时间,因此通常值从
false
开始,然后变为
true
。有时它甚至会在稳定前切换几次。
let connectedRef = Database.database().reference(withPath: ".info/connected")
    connectedRef.observe(.value, with: { snapshot in
        if let connected = snapshot.value as? Bool, connected {
            print("Connected")
        } else {
            print("Not connected")
        }
    })