我需要从不是主线程的线程中读取复选框的状态。看来我不能简单地使用以下内容(这会导致主线程检查器在后台线程上调用“UI API调用: - [NSCell state]”):
myCheckbox.state
我应该做什么呢?
答案 0 :(得分:1)
我目前的解决方案是维护一个在切换复选框时更新的属性,并访问该属性而不是直接读取复选框的状态。
欢迎更优雅的东西:这很麻烦;如果你想让属性为只读或正确处理从程序内部设置它的值,那就更是如此。
class myViewController: NSViewController {
@IBOutlet private weak var myCheckbox: NSButtonCell!
public var myCheckboxState: Bool! // This can be read from any thread.
@IBAction func onMyCheckboxAction(_ sender: NSButtonCell) {
myCheckboxState = (myCheckbox.state == NSOnState)
}
override func viewDidLoad() {
super.viewDidLoad()
...
myCheckboxState = (myCheckbox.state == NSOnState)
...
}
...
}