API
[swift 3] reason: ‘Only run on the main thread!’ error 解消
[環境]
Xcode:8.2.1
Swift:3.0.2
iOS:10.2
今日出たエラーの解消方法です。
かなり苦労してしまいました。
出たエラー:
1 2 |
This application is modifying the autolayout engine from a background thread, which can lead to engine corruption and weird crashes. 'NSInternalInconsistencyException', reason: 'Only run on the main thread!' error |
状況
JSQMessageを利用していて、一覧から詳細にセグエで遷移するさいに上記エラー。
具体的には画面遷移はせず、メモリ消費などがぐんぐん上がってやがてクラッシュという形。
ハマった点
A画面→B画面の構造で、B画面でエラーが出たりしていたため、B画面側だと思ってしまいました。。。
そして1.5時間ほど経ち・・・冷静にB画面のviewDidLoadでのprintは出ているか?と確認初めたところ、
そもそも出ていない。。。これは・・・A画面か?と気づく。。。
解消方法
1 |
self.performSegue(withIdentifier: "toBView",sender: nil) |
のようにしていたので、これをDispatchQueue.main.asyncで囲う。
1 2 3 |
DispatchQueue.main.async { self.performSegue(withIdentifier: "toBView",sender: nil) } |
これで解消されました。
特にdo try catchでAPIに投げて、変数に格納して、別画面に行く時なんかはよく起きるので同じエラーが出たらお試しください!
村本訓一
http://kunikazumuramoto.com株式会社lord代表。WEBデザイナー⇒ディレクター⇒プロデューサーです。2010年から起業しています。社会に出てからずっとWEB屋です。 新しいネットサービス、デバイス、コミック、本、映画好きです。最近は急にプログラマーっぽい事もやってます。