当应用程序处于非活动状态时,或在应用程序终止时,用户默认不更新值

时间:2018-10-05 12:00:28

标签: swift apple-push-notifications nsuserdefaults remote-notifications

我想在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类时,它将每次添加新的观察者。

0 个答案:

没有答案