Main Thread Checker: UI API called on a background thread
iOSでバックグラウンドスレッドからUIを更新しようとした場合に発生
概要
iOSでは、UIの更新は必ずメインスレッドで行う必要があります。バックグラウンドスレッドからUIを操作しようとすると、このエラーが発生します。
エラーメッセージ
Main Thread Checker: UI API called on a background thread: -[UILabel setText:]
原因
- 非同期処理のコールバック内でUI更新: completionハンドラ内でUI操作
- URLSessionのdataTask: デフォルトでバックグラウンドスレッドで実行
- Combine/RxSwiftのスレッド: 明示的にメインスレッドに切り替えていない
解決策
1. DispatchQueue.main.asyncを使用
| |
2. @MainActorを使用(Swift 5.5+)
| |
3. async/awaitでメインスレッドに戻る
| |
4. Combineでreceive(on:)を使用
| |
5. RxSwiftでobserve(on:)を使用
| |
6. ViewModelパターン
| |
Swift の他のエラー
この記事は役に立ちましたか?