【问题标题】:How to solve: This application is modifying the autolayout engine from a background thread如何解决:此应用程序正在从后台线程修改自动布局引擎
【发布时间】:2018-01-23 03:42:30
【问题描述】:

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

【问题讨论】:

    标签: ios xcode background autolayout ios-autolayout


    【解决方案1】:

    “此应用程序正在从后台线程修改自动布局引擎”的主要问题是,它似乎在实际问题发生后很长时间才被记录,这使得故障排除非常困难。

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

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

    断点 1:

    • 符号:-[UIView setNeedsLayout]

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

    断点 2:

    • 符号:-[UIView layoutIfNeeded]

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

    断点 3:

    • 符号:-[UIView updateConstraintsIfNeeded]

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

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

    【讨论】:

    • 有没有办法在 Visual Studio 中做到这一点?
    • 非常感谢!我的应用程序不断记录 3 条不同的“从后台线程修改”消息,但它们实际上直到至少 10 秒后才显示出来——在转到不同的 ViewController 之后,即使那里的代码甚至没有主动使用后台线程.你介意发布你的答案(或至少链接到它)here 吗?这是作为第一个搜索结果显示的问题,人们也不断链接到它。如果我没有用 Google 搜索 !(BOOL)[NSThread isMainThread],我就不会找到你的。
    • 现在@Neph 也发布了。
    • 很棒的信息,花了好几个小时才找到问题,这个图钉为我指出了它。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-20
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多