[英]UIDatePicker setEnabled must be used from main thread only
我希望在单击“不允许”通知后使某些对象不启用并透明。 但是,如下图所示,我有一个错误。 我怎么解决这个问题?
override func viewDidLoad() {
super.viewDidLoad()
if let savedFirstNotification = savedFirstNotification {
firstDatePicker.date = savedFirstNotification
}
if let savedSecondNotification = savedSecondNotification {
secondDatePicker.date = savedSecondNotification
}
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .badge, .sound]) { (granted, error) in
if granted {
print("Yep")
} else {
print("No")
self.notEnable()
}
}
}
func notEnable() {
firstDatePicker.isEnabled = false
firstDatePicker.alpha = 0.5
secondDatePicker.alpha = 0.5
secondDatePicker.isEnabled = false
scheludeMeal.alpha = 0.5
scheludeMeal.isEnabled = false
}
切换UIView
的isEnabled
属性需要在主线程中完成,因为这是在修改UI,这只能在主线程中进行。 您需要使用DispatchQueue.main.async
notEnable
的调用调度到主线程。 requestAuthorization
的关闭似乎是在后台线程上执行的,因此尝试从该关闭内部更新UI时会看到错误。
center.requestAuthorization(options: [.alert, .badge, .sound]) { (granted, error) in
if granted {
print("Yep")
} else {
print("No")
DispatchQueue.main.async{
self.notEnable()
}
}
}
您应该在主线程上调用notEnable()
:
DispatchQueue.main.async {
self.notEnable()
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.