从设置手动更改设备通知时如何通知消息 。通知更改,应用程序内部将调用什么方法,以了解通知已更改
override func awakeFromNib() {
super.awakeFromNib()
let center = UNUserNotificationCenter.current()
center.getNotificationSettings { (settings) in
if(settings.authorizationStatus == .authorized)
{
print(" authorized")
DispatchQueue.main.async {
self.onOffSwitch.isOn = true
}
}
else
{
print(" not authorized")
DispatchQueue.main.async {
self.onOffSwitch.isOn = false
}
}
}
我在SettingViewcontroller内部获得了tableview,自定义我的单元格,并在其中添加了swift onOffSwift。 用户根据该设置手动更改设置中的通知,我希望我的应用程序相应地进行同步。
SettingViewController
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
tbl_SettingView.reloadData()
}
我希望这对我有用吗?但不是
当用户更改那里的设置时,如何处理来自设置屏幕的通知应反映在移动应用屏幕上。
答案 0 :(得分:1)
更改设置后,您的应用不会收到自动通知。但是用户只能在“设置”应用中进行此更改,因此您可以在应用回到前台时检查设置。
您的原因
override func viewWillAppear(_ animated: Bool) {
无济于事,当应用回到前台时,不会调用viewWillAppear
。
答案 1 :(得分:0)
也许有更好的方法,但是我知道的是这样:
将Settings.authorizationStatus存储为单例类中的值或UserDefaults中的条目
只要应用程序激活,就将新值与存储的值进行比较。如果它们与您知道的设置不同,那么它们将被更改
答案 2 :(得分:0)
我相信您希望在应用进入前台而不是在调用 viewWillAppear 时获得更新的设置。只需将观察者添加到您的 viewDidLoad()(不要忘记在完成控制器后将其删除):
NotificationCenter.default.addObserver(forName: UIApplication.willEnterForegroundNotification, object: nil, queue: nil) { _ in
UNUserNotificationCenter.current().getNotificationSettings(completionHandler: { settings in
DispatchQueue.main.async {
// update your view with current settings.authorizationStatus
}
})
}