首页 > 解决方案 > “NSInternalInconsistencyException:线程违规:预期主线程”在我的代码之外

问题描述

我的 iOS 应用程序因以下错误而崩溃:

*** Assertion failure in -[FBSSerialQueue assertOnQueue], /BuildRoot/Library/Caches/com.apple.xbs/Sources/FrontBoardServices/FrontBoard-626.4.1/FrontBoardServices/FBSSerialQueue.m:98
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'threading violation: expected the main thread'

这是堆栈跟踪:

Exception: NSInternalInconsistencyException

Reason: threading violation: expected the main thread

Stacktrace: (
0   CoreFoundation                      0x000000018d56c980 DC2C95C6-B954-39E8-86A2-5E0AF8801E87 + 1255808
1   libobjc.A.dylib                     0x000000018d285028 objc_exception_throw + 60
2   CoreFoundation                      0x000000018d4694fc DC2C95C6-B954-39E8-86A2-5E0AF8801E87 + 193788
3   Foundation                          0x000000018d8aa690 7A7A96AF-79E4-3DB1-8904-42E61CAE8999 + 571024
4   FrontBoardServices                  0x00000001927ae7ec 370F1F18-E8A9-36B5-B0EB-9735A02CE2DE + 366572
5   FrontBoardServices                  0x0000000192760460 370F1F18-E8A9-36B5-B0EB-9735A02CE2DE + 46176
6   FrontBoardServices                  0x00000001927606ec 370F1F18-E8A9-36B5-B0EB-9735A02CE2DE + 46828
7   FrontBoardServices                  0x00000001927605e4 370F1F18-E8A9-36B5-B0EB-9735A02CE2DE + 46564
8   UIKitCore                           0x00000001911e1c40 AAFEFEBE-C172-3346-8972-810EB8F2F2C6 + 5995584
9   UIKitCore                           0x00000001912d1870 AAFEFEBE-C172-3346-8972-810EB8F2F2C6 + 6977648
10  UIKitCore                           0x00000001912d2640 AAFEFEBE-C172-3346-8972-810EB8F2F2C6 + 6981184
11  CameraUI                            0x00000001afbb8514 289C074B-4FFE-3D83-927A-98B268DD914F + 652564
12  libobjc.A.dylib                     0x000000018d29f3f8 objc_release + 136
13  CameraUI                            0x00000001afc5b118 289C074B-4FFE-3D83-927A-98B268DD914F + 1319192
14  libobjc.A.dylib                     0x000000018d284130 2C18C54E-6C84-310C-851F-F9602890D908 + 20784
15  libobjc.A.dylib                     0x000000018d296f80 objc_destructInstance + 92
16  libobjc.A.dylib                     0x000000018d29de44 _objc_rootDealloc + 52
17  CameraUI                            0x00000001afc502c4 289C074B-4FFE-3D83-927A-98B268DD914F + 1274564
18  libobjc.A.dylib                     0x000000018d29f3f8 objc_release + 136
19  CoreFoundation                      0x000000018d4b243c DC2C95C6-B954-39E8-86A2-5E0AF8801E87 + 492604
20  CoreFoundation                      0x000000018d43cfc0 DC2C95C6-B954-39E8-86A2-5E0AF8801E87 + 12224
21  libobjc.A.dylib                     0x000000018d29f3f8 objc_release + 136
22  CameraUI                            0x00000001afcb3704 289C074B-4FFE-3D83-927A-98B268DD914F + 1681156
23  libobjc.A.dylib                     0x000000018d284130 2C18C54E-6C84-310C-851F-F9602890D908 + 20784
24  libobjc.A.dylib                     0x000000018d296f80 objc_destructInstance + 92
25  libobjc.A.dylib                     0x000000018d29de44 _objc_rootDealloc + 52
26  CameraUI                            0x00000001afca48ac 289C074B-4FFE-3D83-927A-98B268DD914F + 1620140
27  libobjc.A.dylib                     0x000000018d29f3f8 objc_release + 136
28  libsystem_blocks.dylib              0x000000018d18fa08 _Block_release + 168
29  libobjc.A.dylib                     0x000000018d29f3f8 objc_release + 136
30  libsystem_blocks.dylib              0x000000018d18fa08 _Block_release + 168
31  libdispatch.dylib                   0x0000000102d3b27c _dispatch_client_callout + 20
32  libdispatch.dylib                   0x0000000102d4290c _dispatch_lane_serial_drain + 720
33  libdispatch.dylib                   0x0000000102d434fc _dispatch_lane_invoke + 408
34  libdispatch.dylib                   0x0000000102d4e4dc _dispatch_workloop_worker_thread + 1344
35  libsystem_pthread.dylib             0x000000018d2776d0 _pthread_wqthread + 280
36  libsystem_pthread.dylib             0x000000018d27d9e8 start_wqthread + 8
)

似乎完全在我的代码之外。有没有办法调试这个?它是iOS组件中的错误吗?

UIImagePickerController 似乎参与其中。这似乎是在通过相机挑选照片后不久发生的。

编辑:这是崩溃后调试导航器显示的内容:

在此处输入图像描述

还有一张截图:

在此处输入图像描述

我无法识别应用程序中重现崩溃的单个操作。我需要在一个组件中单击,该组件从相机拍摄照片并将其保存到 UICollectionView 中。只有有时和最终,崩溃发生在不同的点。

我已经验证了里面的代码imagePickerController:didFinishPickingMediaWithInfo:是在主线程上运行的。

如何在我的代码中找到发生此崩溃的确切位置?

编辑 2:来自 Apple 开发人员技术支持的更新;他们认为这是一个错误,他们建议提交错误报告。

标签: ios

解决方案


在 iOS14 UIImagePicker 已被弃用,因此我建议将您的代码包装在 iOS 版本检查中,并改用新的 PHPickerViewController。不是最好的解决方案,但它是一些东西。


推荐阅读