UIDatePicker setEnabled必须仅在主线程中使用

时间:2018-11-27 14:09:12

标签: ios swift datepicker notifications

我希望在单击“不允许”通知后使某些对象不启用并透明。但是,如下图所示,我有一个错误。我该如何解决这个问题?

screenshot

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
}

2 个答案:

答案 0 :(得分:3)

切换isEnabled的{​​{1}}属性需要在主线程中完成,因为这是在修改UI,这只能在主线程中进行。您需要使用UIView将对notEnable的调用调度到主线程。 DispatchQueue.main.async的关闭似乎是在后台线程上执行的,因此尝试从该关闭内部更新UI时会看到错误。

requestAuthorization

答案 1 :(得分:1)

您应该在主线程上调用notEnable()

DispatchQueue.main.async {
    self.notEnable()
}