我在使用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")
}
})
}
答案 0 :(得分:4)
我处理此问题的首选方法是实现跟踪连接状态的共享实例。我有一个isConnected
布尔值,可根据.info/connected
值在true和false之间切换,但我认为另一个布尔值hasConnected
也很重要。
hasConnected
使用false
进行实例化,除非我们收到连接结果,否则不会更改。这意味着当应用首次报告其断开连接的结果时,您可以检查hasConnected
布尔值以确定它是否实际连接过。您可能只想在hasConnected
为true
之前停用连接提醒。
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
}
})
如果您有任何想了解更多信息,请告诉我。