首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >应用程序激活后,布局更新缓慢。

应用程序激活后,布局更新缓慢。
EN

Stack Overflow用户
提问于 2017-05-02 12:16:35
回答 1查看 241关注 0票数 3

我的目标是检查UNUserNotificationCenter的授权状态(当应用程序再次激活/进入前台时),并根据信息打开或关闭UISwitch

该函数工作并立即被触发,但UISwitch需要3-5秒才能更新。有没有更好的方法来更新它?

代码语言:javascript
复制
override func viewDidLoad() {
  super.viewDidLoad()
  NotificationCenter.default.addObserver(self, selector: #selector(checkNotificationSettings), name: NSNotification.Name.UIApplicationDidBecomeActive, object: nil)
}

func checkNotificationSettings() {
  self.center.getNotificationSettings { (settings) in
    switch settings.authorizationStatus {
    case .authorized:
      self.notificationSwitch.isOn = true
    case .notDetermined, .denied:
      self.notificationSwitch.isOn = false
    }
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-02 12:29:21

getNotificationSettings基本上是异步请求通知设置,因此执行完成块需要一段时间。

上述方法的Apple文档还指出,完成块可以在后台线程上执行。但是,与UI交互的所有内容都必须在主线程上运行,否则会遇到类似于您在这种情况下遇到的问题。

您应该用DispatchQueue.main结束它,以便将与UI相关的工作中继到主队列,并且一切都应该按预期工作:

代码语言:javascript
复制
self.center.getNotificationSettings { settings in
  DispatchQueue.main.async { 
    self.notificationSwitch.isOn = (settings.authorizationStatus == .authorized)
  }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43737680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档