しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

【iOSのエラー】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.の対処法

表題のエラーに遭遇した時の対処法です。

発生状況

viewDidLoadでAdMobの設置とAlamofireによる通信を行っている時に発生。
発生したりしなかったりする。

対応策

最初はAdMobをviewDidLoadからviewWillAppearに移動したりしたのですがダメでした。
その後は下記ブログを参考に処理をdispatch_asyncで囲んだら解決しました。

dispatch_async(dispatch_get_main_queue(), {
    let adView = GADBannerView(adSize: kGADAdSizeBanner)
    adView.adUnitID = "AdUnitID"
    adView.rootViewController = self
    adView.loadRequest(GADRequest())
    view.addSubview(adView)
})

Admobの取得をviewDidLoad()に置いてると「this application is modifying the auto layout engine...」と出る件の対処法@Swift - ぽじてぃぶしんきんぐ

dispatch_asyncで囲むと処理を遅延実行するのでそれが原因で直ったのかもしれません。