2016年9月5日月曜日

変なメッセージ:This application is modifying the autolayout engine〜

 OpenWeatherMapを使って気象情報をもらう処理が時間がかかることがあるので、
 [NSThread detachNewThreadSelector:@selector(getCurrentWeatherData) toTarget:self withObject:nil];
というように別スレッドで処理するようにしていた。
iOS7、8の頃は良かったが、9になったら以下のメッセージとともにずらずらとオブジェクトの中身みたいなメッセージが表示されるようになった。
This application is modifying the autolayout engine from a background thread, which can lead to engine corruption and weird crashes.  This will cause an exception in a future release.
バックグラウンドのスレッドでオートレイアウトをいじってると、将来痛い目にあうぞという意味だと思う。
気象情報をラベルなんかに入れる時に、オートレイアウトの設定で文字数に応じてサイズを変更してくれたりするようなので、その関連だろう。

以下のようにdispatch_async()で処理してやったらエラー出なくなった。

Objective-Cのコード
dispatch_async(dispatch_get_main_queue(), ^{
        ここにコードを書く
    });

そもそも、別スレッドの並列処理にしなくても大丈夫そうなので、普通にgetCurrentWeatherDataメソッド呼ぶようにしちゃったけどねw

0 件のコメント:

コメントを投稿