Swift 本地通知检查器仅主线程

Posted

技术标签:

【中文标题】Swift 本地通知检查器仅主线程【英文标题】:Swift Local Notifications Checker Main Thread Only 【发布时间】:2020-07-04 21:34:41 【问题描述】:

我有一个完成返回布尔值的方法。但我不知道如何解决这个错误。

错误

UISwitch.isOn must be used from main thread only

按钮操作

@IBAction func notificationSwitch(_ sender: Any) 
    
    LocalNotification().checkEnabled(completion:  (success) -> Void in
        
        // When download completes,control flow goes here.
        if success == false
            print("Cant Turn On")
            self.notificationToggle.isOn = false
         else 
            print("Can Turn On")
            if self.notificationToggle.isOn == true 
                self.notificationToggle.isOn = false
             else 
                self.notificationToggle.isOn = true
            
        
    )

也已经尝试将LocalNotifications().... 包装在DispatchQueue.main.async 中,但仍然出现相同的错误

【问题讨论】:

你了解“异步”这个词吗? getNotificationSettings 是异步的;你不能从checkEnabled 返回任何依赖它的值。请阅读programmingios.net/what-asynchronous-means 我不能给这个方法添加一个补全吗?我试过了,但我不知道如何调用该方法来检索完成 bool @matt 您当然可以添加一个完成处理程序参数。 — 不幸的是,您现在对问题进行了如此彻底的编辑,以至于不再清楚它是关于什么的。我试图回答关于现在的情况。 【参考方案1】:

你快到了。不是checkEnabled 需要包装在调用中才能进入主线程,而是“内部”的东西:

    LocalNotification().checkEnabled(completion:  (success) -> Void in
        DispatchQueue.main.async 
            if success == false 

【讨论】:

是的,这有助于解决错误,但你知道为什么一旦self.notificationToggle.isOn = true 它继续保持为真,如果再次点击不会变为假? 实际上那部分是我的错,但你的答案是我正在寻找的谢谢你提供的答案不像@Matt认为他是的人

以上是关于Swift 本地通知检查器仅主线程的主要内容,如果未能解决你的问题,请参考以下文章

swift ios检查本地通知是不是被解除[重复]

Swift 本地推送通知UILocalNotification

用户选择的 swift 3 重复间隔中的本地通知

使用前台应用程序检测本地通知的点击,swift 4

推送通知iOS - 提示应用程序检查资源并在适当时提供本地通知

不同日期的本地通知 Swift 3