我知道如果我在UIApplicationDelegate
注册UNUserNotificationCenter
而在前台模式注册应用,我会轻易更改TabBarItem.badgeValue
。我只需要在func userNotificationCenter(...)
但是,当应用处于后台模式时,如何做同样的事情? (像WhatsApp那样)
答案 0 :(得分:1)
简单回答......你没有。 UI更改必须位于主线程上。相反,我建议您在UIApplicationDidBecomeActive
注册NotificationCenter
通知并更新徽章价值。
(我在下面的代码中使用UserDefaults
是出于方便而仅举例。我可能会建议您根据在应用中存储状态的方式使用其他存储方法。)
后台代码:
let badgeValue = 100
UserDefaults.standard.set(badgeValue, forKey: "badgeValue")
在视图控制器中:
class MyViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//set it here for when view controller is loaded
let badgeValue = UserDefaults.standard.string(forKey: "badgeValue")
self.tabBarItem.badgeValue = badgeValue
NotificationCenter.default.addObserver(forName: Notification.Name.UIApplicationDidBecomeActive, object: nil, queue: OperationQueue.main) { [weak self] (notification) in
//set it here for when you come back from the background
let badgeValue = UserDefaults.standard.string(forKey: "badgeValue")
self?.tabBarItem.badgeValue = badgeValue
}
}
}