はじめに
私物でapple製品を一度も買ったこともない人間が、ある日iOSアプリの改修担当になり、iOSアプリの開発あるあるのメインスレッド以外でUIの更新をしようとしてクラッシュさせてしまっときの備忘録です
何もしてないのにクラッシュ?何・・・だと・・・?
swiftの基礎をなんとなく勉強してiOS13対応を黙々とやっていました
その時のビルドして動作確認をすると、モーダルを表示するところで突如クラッシュを起こしてしまいました・・・・
一体なんだ??っとなりクラッシュした原因を漁ってみると、以下のようなエラーが・・・
Fatal Exception: NSInternalInconsistencyException
Modifications to the layout engine must not be performed from a background thread after it has been accessed from the main thread.
どうやらバックグラウンドスレッドでUI更新をするのはやめろとのこと
このあたりはGCD※の都合上だめみたいです
※GCD(Grand Central Dispatch)についていは以下の記事を見て理解
https://qiita.com/ShoichiKuraoka/items/bb2a280688d29de3ff18
iOS13対応に伴って急にだめになったのはなぜに?
https://forums.developer.apple.com/thread/121424
それらしき記事があり、iOS13のアップデートで内部的仕様が変わったみたい
え?じゃあマルチスレッドのときどうすれば???
かんたんな話、メインスレッドにキューとして入れればいいだけの話でした
DispatchQueue.main.sync
でいい感じにキューに溜め込んでくれるみたいです
DispatchQueue.main.sync {
// code...
}
終わりに
普段はwebアプリばっかり書いているのもあり、アプリ開発大変だなぁという気持ち
swift力を高めねば・・・