2016-05-31 9 views
1

SwiftアプリケーションでFirebase接続ステータスを検出できません。私のView Controllerが起動すると直ちに表示され、alert状態が表示され、接続ステータスが表示されなくなります。これは、アプリの起動時に実際にステータスが何であるかにかかわらず毎回これを行います。アプリが起動されると、接続ステータスが確実に報告されます。別のビューコントローラーに切り替えて元のビューコントローラーに戻しても、接続が再びダウンしたとは報告されません。アプリが最初に起動したときにのみ発生します。ここでは、viewDidLoadメソッドで接続ステータスの検出を実装したコードを示します。誰にも何か提案はありますか?SwiftアプリケーションでのFirebase接続ステータスの検出に問題があります

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") 
     } 

    }) 

} 

答えて

4

これを処理するための私の好みの方法は、接続状態を追跡する共有インスタンスを実装することでした。私は.info/connectedの値に応じて真と偽の間でトグルするisConnectedブール値を持っていましたが、別のブール値を持つことも重要だと思います。hasConnected

hasConnectedfalseでインスタンス化され、接続結果を受け取らない限り変更されません。これは、アプリケーションが最初に接続されていない結果を報告しているときに、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 
    } 
}) 

さらに詳しい情報が必要な場合は教えてください。

+0

どのように条件付きで動作しますか? like hasConnected && isConnected { // connected } else { //接続されていない } ??? – zramled

関連する問題