我收到了可怕的警告:
此应用程序正在从后台修改autolayout引擎 从主线程访问引擎后的线程。这个可以 导致引擎损坏和奇怪的崩溃。
我知道这意味着什么(以前曾多次询问过)以及如何修复它,或者我应该说我会知道,如果我有线索的话我的代码的哪一部分导致它:警告连续多次弹出,并且只有在我没有触摸应用程序一段时间之后。
此外,没有异步操作(我知道),其结论可以触发它。
所以问题是:是否有一个符号断点我可以设置(类似于着名的'不可满足的布局约束')来捕获它?
我已经尝试了this回答(+[NSException raise:format:]
上的符号断点)中提供的解决方案,但是对于每个警告,它在以下调用堆栈的某个后台线程上停止了三次:
第一站:
Thread 11
> 0 +[NSException raise:format:]
16 start_wqthread
第二站:
Thread 11
> 0 objc_exception_throw
17 start_wqthread
第三站:
Thread 11
> 0 __cxa_throw
20 start_wqthread
通过警告登录到控制台的堆栈如下:
Stack:(
0 CoreFoundation 0x000000010378834b __exceptionPreprocess + 171
1 libobjc.A.dylib 0x00000001031e921e objc_exception_throw + 48
2 CoreFoundation 0x00000001037f1265 +[NSException raise:format:] + 197
3 Foundation 0x0000000102ee4320 _AssertAutolayoutOnAllowedThreadsOnly + 180
4 Foundation 0x0000000102d05be4 -[NSISEngine withBehaviors:performModifications:] + 31
5 UIKit 0x0000000105417a42 -[UIView(UIConstraintBasedLayout) _resetLayoutEngineHostConstraints] + 76
6 UIKit 0x0000000104b11317 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1192
7 QuartzCore 0x00000001047cfcdc -[CALayer layoutSublayers] + 146
8 QuartzCore 0x00000001047c37a0 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 366
9 QuartzCore 0x00000001047c361e _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24
10 QuartzCore 0x000000010475162c _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 280
11 QuartzCore 0x000000010477e713 _ZN2CA11Transaction6commitEv + 475
12 QuartzCore 0x000000010477eb91 _ZN2CA11Transaction14release_threadEPv + 593
13 libsystem_pthread.dylib 0x0000000107f8e50f _pthread_tsd_cleanup + 544
14 libsystem_pthread.dylib 0x0000000107f8e249 _pthread_exit + 152
15 libsystem_pthread.dylib 0x0000000107f8c7cd pthread_attr_getschedpolicy + 0
16 libsystem_pthread.dylib 0x0000000107f8c1ed start_wqthread + 13
)
...既未提供有关我的代码的许多线索。