Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UIDatePicker setEnabled只能从主线程使用_Ios_Swift_Datepicker_Notifications - Fatal编程技术网

Ios UIDatePicker setEnabled只能从主线程使用

Ios UIDatePicker setEnabled只能从主线程使用,ios,swift,datepicker,notifications,Ios,Swift,Datepicker,Notifications,我希望某些对象在单击“不允许”通知后变为未启用和透明。但是,我有一个错误,如下图所示。我怎样才能解决这个问题 override func viewDidLoad() { super.viewDidLoad() if let savedFirstNotification = savedFirstNotification { firstDatePicker.date = savedFirstNotification } if let savedSe

我希望某些对象在单击“不允许”通知后变为未启用和透明。但是,我有一个错误,如下图所示。我怎样才能解决这个问题

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()
        }
    }
}

切换
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.notable()
}

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

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

任何UI更改都必须发生在主线程中。任何UI更改都必须发生在主线程中。整个函数都需要从主线程调用,因为其中的所有代码都在修改UI。简单地将其中的第一条语句分派到主线程并不能解决问题。整个函数需要从主线程调用,因为其中的所有代码都在修改UI。简单地将其中的第一条语句分派到主线程并不能解决问题。