2017-05-29 4 views
1

多くのサードパーティ製のライブラリを使用し、ログに次のエラーが表示される大規模なアプリケーションがあります。「このアプリケーションは、メインスレッドからエンジンにアクセスした後、バックグラウンドスレッドから自動レイアウトエンジンを変更しています。エンジンの破損や奇妙なクラッシュにつながる可能性があります。原因を見つける:「このアプリケーションは、メインスレッドからエンジンにアクセスした後、バックグラウンドスレッドから自動レイアウトエンジンを変更しています。

ここで私が見つけたことは、おそらく、自動レイアウトをトリガーしているバックグラウンドスレッドでUI要素が変更されたためです。残念ながら、非常に多くのUI要素が非常に多くの異なる可動部分によって変更されているため、原因を見つけるための最良の方法がわかりません。

バックグラウンドスレッドからautolayoutの変更を正確にトリガしていることをどのようにして知ることができますか?

+0

完了ブロックを確認してください。完了ブロックのUIコードが 'DispatchQueue.main.async {}'にラップされていることを確認してください。 – rmaddy

+0

これは大規模なアプリケーションです。非常に多くの完了ブロックがあります。だから、非常に多く。私はツールベースのアプローチがどこかにあることを願っています。なぜならそうでなければ、それは永遠にかかるからです。 –

+2

https://stackoverflow.com/questions/32680303/ios9-this-application-is-modifying-the-autolayout-engine-from-a-background-thrを参照し、最後のコメント(Swiftリンク)を確認してください受け入れられた答え。 – rmaddy

答えて

1

時には完了ブロックではなく、バックグラウンドで実行されるものです。 私の場合、通知が送信されました。私はiCloudを私のアプリケーションに実装しました。これは、データが編集されたり、別のデバイスに追加されたときに、他のアプリケーションがiCloudのアップデート/通知を受け取り、UITableViewの更新を引き起こしたことを意味します。 MainThreadでUITableViewを更新するコードが実行されていません。コメントに示されているコードを追加すると、コメントが修正されます。

関連する問題

 関連する問題