Swift

时间:2018-05-21 18:22:33

标签: ios swift multithreading

我尝试以编程方式创建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

我花了我的第二个小时,并没有意识到这里有什么问题。有人能帮助我理解吗?

1 个答案:

答案 0 :(得分:1)

问题在于,不是在您显示的任何代码中(在视图控制器内),而是在召唤视图控制器的代码中。视图控制器是如何形成的?例如,如果是因为您致电performSegue,则需要确保在主线程上调用performSegue