iOS9 – 这个应用程序正在从后台线程修改自动布局引擎 – 在哪里?

对于search,错误消息是:

此应用程序正在从后台线程修改自动布局引擎,这可能会导致引擎损坏和怪异的崩溃。 这将在未来的版本中引起exception。

我知道这意味着一些UIKit代码是从后台线程调用的,我知道解决scheme是包装代码

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

我的问题是定位在哪里做,因为没有任何印刷的堆栈跟踪引用我的应用程序代码。 我的证据certificate这个消极的是在debugging输出窗口中search(命令-f)我的应用程序的名称; 我有24堆栈跟踪倾倒出来,我的应用程序名称是不是在其中任何一个,除了在错误信息的顶部。 我可以发布其中之一,但这似乎不是很有用。

在我今天正在处理的情况下,在viewWillDisappear()viewWillAppear()之前转换视图控制器时发生这种情况。 我已经find了我的代码的一部分来包装dispatch_async() ,但是这些都是现在处理的。 我有与视图控制器相关的对象被分配和释放的断点和debugging消息,并且它们都在exception消息出现之后触发。 在模拟器和我的iOS9 iPhone上都发生这种情况,无论是在debugging模式还是释放模式。

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

这段代码PSPDFUIKitMainThreadGuard会导致在主线程之外的UIKit访问断言

使用步骤:

  1. 添加到项目和编译这个文件没有ARC
  2. PSPDFAssert定义移动到文件的第一个位置
  3. 因为没有定义PSPDFLogError注释
  4. 导入<UIKit/UIKit.h>

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

快速使用以下代码: NBUIKitMainThreadGuard

 NSOperationQueue.mainQueue().addOperationWithBlock(){ [YOUR CODE] }