2017-11-06 4 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

관련 문제