メインスレッド以外のスレッドからUIViewにアクセスしてはいけない
基本的なルールすぎて忘れがちだがメインスレッド以外のスレッドからUIViewにアクセスしてはいけない。
というわけですっかり忘れていて数時間無駄にしてしまった。
場所はUITextViewに対して文字列を設定する箇所。
Application Outputには以下の様に出力されていた。
. . . Thread started: bool _WebTryThreadLock(bool), 0xe415c80: Tried to obtain the web lock from a thread other than the main thread or the web thread. This may be a result of calling to UIKit from a secondary thread. Crashing now... 1 WebThreadLock 2 -[UITextView setText:] 3 0x12fc2838 4 0xfcf016c 5 0x158475a1 6 0x15847414 7 0x15846842 . . .
メッセージを読めばすぐに気づく。でもハマった。
言い訳になるがこの例外は必ず起きるわけではなく、代入する文字列によって例外が発生しないのだ。その結果、代入している文字列に問題が!?と、思考がそっちに傾いてしまっていた。