【发布时间】:2015-09-20 14:09:46
【问题描述】:
对于搜索,错误信息是:
此应用程序正在从后台线程修改自动布局引擎,这可能会导致引擎损坏和奇怪的崩溃。这将在未来的版本中导致异常。
我知道这意味着一些 UIKit 代码是从后台线程调用的,我知道解决方案是将代码包装在
dispatch_async(dispatch_get_main_queue(), ^(void){ <code> });
我的问题是找到执行此操作的位置,因为打印的堆栈跟踪都没有引用我的应用程序代码。我证明这个否定的证据是在调试输出窗口中搜索(command-f)我的应用程序的名称;我已经转储了 24 个堆栈跟踪,并且我的应用程序名称不在其中,除了顶部的错误消息。我可以发布其中一个,但这似乎不是很有用。
在我今天处理的案例中,这发生在转换视图控制器时,在viewWillDisappear() 之后和viewWillAppear() 之前。我发现我的部分代码可以包裹dispatch_async(),但现在这些都已处理。我有断点和调试消息,其中与视图控制器相关的对象被分配和释放,并且它们都在异常消息出现后触发。在调试和发布模式下,模拟器和我的 iOS9 iPhone 都会发生这种情况。
如何识别明显修改 UI 的后台代码?
【问题讨论】:
-
您是否在 ObjC 异常上设置了断点?如果是这样,当你收到这个错误时它会触发吗?
-
是的,是的,每次触发的堆栈跟踪都会触发不止一次。
标签: ios objective-c xcode7