iOS9 - 此应用程序正在从后台线程修改autolayout引擎 - 在哪里?

rob*_*obm 37 objective-c ios xcode7

对于搜索,错误消息是:

此应用程序正在从后台线程修改autolayout引擎,这可能导致引擎损坏和奇怪的崩溃.这将在将来的版本中导致异常.

我知道这意味着从后台线程调用一些UIKit代码,我知道解决方案是将代码包装进去

dispatch_async(dispatch_get_main_queue(), ^(void){ <code> });

我的问题是找到这样做的地方,因为没有任何打印的堆栈跟踪引用我的应用程序代码.我证明这是否定的证据是在调试输出窗口中搜索(命令-f)我的应用程序的名称; 我有24个堆栈跟踪被丢弃,我的应用程序名称不在其中任何一个,除了顶部有错误消息.我可以发布其中一个,但这似乎没有用.

在我今天工作的情况下,在转换视图控制器viewWillDisappear()之前和之后都会发生这种情况viewWillAppear().我发现我的部分代码要包装dispatch_async(),但现在都处理完了.我有断点和调试消息,其中分配和取消分配与视图控制器相关的对象,并且它们都在异常消息出现后触发.在调试和发布模式下,模拟器和我的iOS9 iPhone都会发生这种情况.

如何识别显然修改UI的后台代码?

Mah*_*dam 55

此代码PSPDFUIKitMainThreadGuard导致主线程外的UIKit访问断言

使用步骤:

  1. 添加到项目并编译此文件而不使用ARC
  2. PSPDFAssert定义移动到文件的第一个
  3. 评论呼叫,PSPDFLogError因为它没有定义
  4. 进口 <UIKit/UIKit.h>

您的应用程序将崩溃并停止任何尝试从后台线程修改任何UI元素

快速使用以下代码:NBUIKitMainThreadGuard

  • [Swift Solution](https://github.com/nrbrook/NBUIKitMainThreadGuard)感谢nrbrook. (4认同)
  • 对我不起作用.没有例外. (3认同)
  • "将PSPDFAssert定义移动到文件的第一个"是什么意思? (2认同)