无法在Swift应用中检测Firebase连接状态

时间:2016-05-31 02:45:34

标签: swift firebase firebase-realtime-database

我在使用Swift应用程序检测Firebase连接状态时遇到问题。一旦我的视图控制器启动它立即显示和alertView显示我的连接状态已关闭。无论应用程序启动时的状态如何,它都会每次执行此操作。应用程序启动后,可靠地报告连接状态。即使我切换到另一个视图控制器并返回到原始控制器,它也不会再次报告连接。它只在应用程序首次启动时发生。这是我在viewDidLoad方法中实现连接状态检测的代码。有没有人有任何建议?

override func viewDidLoad() {

    //Do these things once when the app first starts up
    super.viewDidLoad()

    mapView.delegate = self

    setMapInitialState()

    let connectedRef = FIRDatabase.database().referenceWithPath(".info/connected")
    connectedRef.observeEventType(.Value, withBlock: {snapshot in

        let connected = snapshot.value as? Bool
        if connected != nil && connected! {
            self.showAlertView("Alert", message: "Connection to server restored - all pending catches will be updated")
            self.refreshCatches()
        } else {
            self.showAlertView("Alert", message: "Connection to server lost - catches by others may not be up to date")
        }

    })

}

1 个答案:

答案 0 :(得分:4)

我处理此问题的首选方法是实现跟踪连接状态的共享实例。我有一个isConnected布尔值,可根据.info/connected值在true和false之间切换,但我认为另一个布尔值hasConnected也很重要。

hasConnected使用false进行实例化,除非我们收到连接结果,否则不会更改。这意味着当应用首次报告其断开连接的结果时,您可以检查hasConnected布尔值以确定它是否实际连接过。您可能只想在hasConnectedtrue之前停用连接提醒。

let connectedRef = FIRDatabase.database().referenceWithPath(".info/connected")
connectedRef.observeEventType(.Value, withBlock: { (connected) in
    if let boolean = connected.value as? Bool where boolean == true {
        print("connected")
        self.hasConnected = true
        self.isConnected = true
    } else {
        print("disconnected")
        self.isConnected = false
    }
})

如果您有任何想了解更多信息,请告诉我。