30
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Advent Calendar 2019

Day 16

swift初心者がiOS13対応でメインスレッド以外でUI更新をしてクラッシュさせてしまった話

Posted at

はじめに

私物で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力を高めねば・・・

30
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?