2017-01-04 7 views
-1

が必要です。そのエラー行に追加します。しかし、自己を添加した後、メッセージコールは、私はこのコードを持って、明示的な自己

とプログラムがクラッシュがキャッチされない例外により「NSInternalInconsistencyException」にアプリを終了理由は:「 - [UIKeyboardTaskQueue waitUntilAllTask​​sAreFinished]のみメインスレッドから呼び出すことができます。」

私は非常に新しいので、私は多くの用語を理解していないかもしれません。

+5

質問をクラッシュについての詳細で更新してください。完全なエラーメッセージを含め、クラッシュの原因となっている正確な行を指摘してください。 – rmaddy

+0

言うまでもなく、「自己」を追加することはクラッシュの原因ではありません。ほとんどの場合、 'displayAlertMessage'はUIと対話しています。これはメインスレッドで行わなければなりません。 'URLSession'補完ハンドラクロージャは、メインスレッド上では実行されません。 segueの場合と同じように、メインキューにそれをディスパッチしてください。 – Rob

+0

@rmaddyエラーが表示された行にコメントがあります。私はちょうどエラーメッセージを追加しました –

答えて

1

ユーザーを追加して、メインスレッドに戻り、ユーザーに警告メッセージを表示してください。

DispatchQueue.main.async() { 
    self.displayAlertMessage(userMessage: "Your credentials are incorrect. Please check your email and password.") 
} 
+1

質問には実際の問題に関する情報が掲載されていないので、回答を投稿するのは少し早すぎるようです。実際の問題が何であるかを知るまで待ってください。 – rmaddy

+0

私は同意する、それは元の質問に明確さの欠如が与えられてこれは問題だったと推測するのは時期尚早であったが、質問が明確になると、これは実際に正しいことが判明した。率直に言えば、コードスニペットを考えれば、クラッシュを引き起こす可能性のある数少ないものの1つでした。 – Rob

0

削除ソリューションにロブさんのコメントを参照するが、これは働いていた:どのようにか、なぜしかし、おかげで「ミカ」

DispatchQueue.main.async() { 
    self.displayAlertMessage(userMessage: "Your credentials are incorrect. Please check your email and password.") 
} 

わかりません。

+0

元のコードには2つの完全に別々の問題がありました。まず、コードがコンパイルされないようにしていた「自己」が欠落していました。次に、 'dataTask'補完ハンドラクロージャのこのコードは、バックグラウンドスレッドで実行されていますが、エラーメッセージと同じようにメインスレッドでUI更新を行う必要があります。したがって、上記はアラートメッセージの表示をメインキューにディスパッチする(すなわち、メインスレッド上でそれを実行する)。 – Rob

+0

申し訳ありません。私はより多くの情報のために少し待つと思った。あなたはそれを答えにしたいと思ったら、私はそれ以来起きていません。 Robのように、クラッシュの原因となっていたメインスレッドですべてのUI更新を行う必要があります。自己の欠如はそれをコンパイルから守っていた。 –

関連する問題