首页 > 解决方案 > 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

我在其中度过了第二个小时,无法意识到这里有什么问题。有人可以帮我理解吗?

标签: iosswiftmultithreading

解决方案


问题不在于您显示的任何代码(在视图控制器内),而在于调用视图控制器的代码。视图控制器是如何产生的?例如,如果是因为你调用performSegue了,你需要确保你调用performSegue 的是主线程


推荐阅读