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

标签 ios objective-c xcode7

对于搜索,错误信息是:

This application is modifying the autolayout engine from a background thread, which can lead to engine corruption and weird crashes. This will cause an exception in a future release.

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

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

我的问题是找到执行此操作的位置,因为打印的堆栈跟踪都没有引用我的应用程序代码。我证明这个否定的证据是在调试输出窗口中搜索(command-f)我的应用程序的名称;我已经转储了 24 个堆栈跟踪,并且我的应用程序名称不在其中,除了顶部的错误消息。我可以发布其中一个,但这似乎不是很有用。

在我今天处理的案例中,这发生在转换 View Controller 时,在 viewWillDisappear() 之后及之前 viewWillAppear() .我找到了要包装的部分代码 dispatch_async()周围,​​但现在都处理好了。我有断点和调试消息,其中与 View Controller 相关的对象被分配和释放,并且它们都在异常消息出现后触发。在调试和 Release模式下,模拟器和我的 iOS9 iPhone 都会发生这种情况。

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

最佳答案

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

使用步骤:

  1. 添加到项目并在不使用 ARC 的情况下编译此文件
  2. 移动PSPDFAssert定义到文件的第一个
  3. PSPDFLogError 的评论电话因为它没有定义
  4. 导入 <UIKit/UIKit.h>

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

为了快速使用以下代码:NBUIKitMainThreadGuard

关于iOS9 - 这个应用程序正在从后台线程修改自动布局引擎——在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32680303/

相关文章:

ios - 如何将 UIView 链接到 UICollectionViewCell?

ios - 权利与配置文件不匹配 (0xE8008016)

swift - 测试时未找到 Google/Analytics.h 文件

ios - Xcode 7 iOS9 字体不再被识别

objective-c - 在应用程序中创建一种导航逻辑 : how to?

cocoa-touch - 用于 VPN 的 iOS 专用 API

ios - AVURLAsset 的缓存行为

c++ - 在闭包中,如何通过指针或引用类型捕获的可变变量存储在内存中或以现代功能语言处理?

iOS 在 "detail view"而不是导航 Controller 创建的 RootVIewController 处启动应用程序

objective-c - 如何更改导航栏分隔线的颜色