ios - “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 开发人员技术支持的更新;他们认为这是一个错误,他们建议提交错误报告。
解决方案
在 iOS14 UIImagePicker 已被弃用,因此我建议将您的代码包装在 iOS 版本检查中,并改用新的 PHPickerViewController。不是最好的解决方案,但它是一些东西。
推荐阅读
- amazon-web-services - 在不使用 AWS Lambda 的情况下安排 AWS EC2 实例的自动启动和自动关闭 [在 AWS GovCloud 中不可用]
- java - 我无法以表格的形式打印数组
- roku - 捕获在 Roku 键盘中输入的字符串
- java - 如何在android中向xml文档发出http post请求
- python - django.core.exceptions.FieldError:为员工指定的未知字段(用户名)
- coffeescript - Hubot 多条消息
- javascript - 将 react 应用上传到 heroku 以安装 devDependencies
- java - 将多个 if-else 转换为 java 中的简单 Lambda 表达式代码
- node.js - 无法在 TypeScript 中扩展 Express 请求
- python - 从mysql服务器错误中提取文本[]