Я хочу сохранить значение в userdefault, чтобы показать значение значка на вкладке.Код работает нормально, когда приложение находится на переднем плане и в фоновом состоянии.Но это не сохранение значения в userdefault в неактивном состоянии.Поэтому, когда я запускаю приложение, я не могу получить количество полученных уведомлений после его завершения.
Добавлен следующий код в AppDelegate
классе:
public static var badgeValue: String? {
get {
return UserDefaults.standard.string(forKey: "updateBadgeValue")
}
set(newValue) {
UserDefaults.standard.set(newValue, forKey: "updateBadgeValue")
UserDefaults.standard.synchronize()
}
}
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
if let badgeValue = AppDelegate.badgeValue {
AppDelegate.badgeValue = String(Int(badgeValue)!+1)
} else {
AppDelegate.badgeValue = "1"
}
NotificationCenter.default.post(name: NSNotification.Name("updateBadgeValue"), object: nil)
}
и извлечено значение по следующему коду в UITabBarController
классе:
override func viewDidLoad() {
super.viewDidLoad()
updateBadgeValue()
}
func updateBadgeValue() {
if UIApplication.shared.applicationIconBadgeNumber != 0 {
self.tabBar.items![0].badgeValue = String(UIApplication.shared.applicationIconBadgeNumber)
}
NotificationCenter.default.removeObserver(self, name: NSNotification.Name("updateBadgeValue"), object: nil).
NotificationCenter.default.addObserver(self, selector: #selector(updateBadgeValue), name: NSNotification.Name("updateBadgeValue"), object: nil)
}
// Удалить наблюдателяудаление предыдущего добавленного наблюдателя, чтобы предыдущий добавленный наблюдатель вызывал снова и снова.Если я не удаляю наблюдателя, то при входе в класс UITabBarController каждый раз добавляется новый наблюдатель.