如何解决:此应用程序正在从后台线程修改自动布局引擎

How to solve: This application is modifying the autolayout engine from a background thread

当代码的某些部分从主线程以外的其他线程更改 UI 项时,此错误将记录到控制台。但是我怎样才能找到它在哪里执行此操作?

"This application is modifying the autolayout engine from a background thread" 的主要问题是它似乎在实际问题发生后很长时间才被记录下来,这使得排除故障变得非常困难。

我通过创建三个符号断点设法解决了这个问题。

调试 > 断点 > 创建符号断点...

断点 1:

  • 符号:-[UIView setNeedsLayout]

  • 条件:!(BOOL)[NSThread isMainThread]

断点 2:

  • 符号:-[UIView layoutIfNeeded]

  • 条件:!(BOOL)[NSThread isMainThread]

断点 3:

  • 符号:-[UIView updateConstraintsIfNeeded]

  • 条件:!(BOOL)[NSThread isMainThread]

使用这些断点,您可以轻松地在您在非主线程上错误地调用 UI 方法的实际行上打断。