ios - Swift 中线程的奇怪问题
问题描述
我正在尝试以UIPickerView
编程方式创建,为此我做了:
var pickerView = UIPickerView()
override func viewDidLoad() {
super.viewDidLoad()
self.pickerView.delegate = self
self.pickerView.dataSource = self
}
但根据线程,我得到了非常烦人的错误:
Main Thread Checker: UI API called on a background thread: -[UIPickerView init]
PID: 70649, TID: 6408323, Thread name: (none),
Queue name: NSOperationQueue 0x60000023ba20 (QOS: UNSPECIFIED), QoS: 0
这真的很奇怪,因为它以前有效,现在它开始出现了!
我试图将其更改为:
var pickerView: UIPickerView!
override func viewDidLoad() {
super.viewDidLoad()
Dispatch.main.async {
self.pickerView = UIPickerView()
self.pickerView.delegate = self
self.pickerView.dataSource = self
}
}
但我又崩溃了。另一个错误日志是:
Assertion failure in void _UIPerformResizeOfTextViewForTextContainer(NSLayoutManager *, UIView<NSTextContainerView> *, NSTextContainer *, NSUInteger)(), /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIFoundation_Sim/UIFoundation-546.4/UIFoundation/TextSystem/NSLayoutManager_Private.m:1619
我在其中度过了第二个小时,无法意识到这里有什么问题。有人可以帮我理解吗?
解决方案
问题不在于您显示的任何代码(在视图控制器内),而在于调用视图控制器的代码。视图控制器是如何产生的?例如,如果是因为你调用performSegue
了,你需要确保你调用performSegue
的是主线程。
推荐阅读
- typo3 - TYPO3 流体:是否可以内联编写 f:link.typolink?
- wpf - 主 WPF 窗口是否应该直接启动新页面?
- html - Excel VBA 无法在 IE HTML 上“单击”按钮
- node.js - 中间件功能在 node.js 中不起作用
- jquery - jQuery滚动单击到具有相同类的下一个href
- c# - 使用 foreach 循环和 LINQ 的操作有什么区别?
- swift - 调用中的参数标签不正确(有'uiImage:',预期'来自:')
- javascript - 如何将输入限制在一个值范围内
- visual-studio-code - 无论如何以编程方式重新启动我的 VSCODE 扩展?
- python - 我的海龟没有检测到输入,它可以越过边界