2017-11-06 6 views
1

私は以下のコードスニペットを使用しています。エラーが発生した場合は、エラーメッセージが表示された後、再試行ボタンを表示します。ただし、エラーが発生すると、エラーはログに出力されますが、ラベルとボタンは表示されません。何か不足していますか?Swift Firebaseデータベースエラー処理

  user_ref = Database.database().reference(withPath: "userdetails") 

      self.user_ref.observe(.value, with: { snapshot in 
       if !snapshot.exists() { return } 
       let snapshotValue = snapshot.value as? NSDictionary 

       if let temp_usertype = snapshotValue?["usertype"] as? String { 
        usertype = temp_usertype 
       } 

       self.user_ref.removeAllObservers() 

       self.close() 
      }) 
      {(error) in 
       print(error.localizedDescription) 

       self.lblMessage.text = "\(error.localizedDescription)" 
       self.btnRetry.isEnabled = true 
       self.btnRetry.alpha = 1.0 
       return 
      } 

答えて

0

はい。 UIへの変更はメインスレッドで処理する必要があります。あなたがエラーを渡された場合、それは良いだろうので

DispatchQueue.main.async { 

} 

時にはメインスレッドを呼び出そうとし、閉鎖にUIを更新するにはクラッシュの原因:あなたはこのようAsync.Mainコールにそのコードを配置する必要があります完了ブロックを通過してオブジェクトを終了し、終了関数に到達すると、エラーメッセージをタイトルとして、コードをメッセージとして(またはその逆)表示し、閉じるボタンを持つ警告を起動する関数を呼び出します。

+0

どのように動作するかについてご質問がある場合は、このページをご覧ください。 https://github.com/JZDesign/OnTheMap/blob/master/OnTheMap/Client.swift – Jake

関連する問題