Parse.com和ios的安装和徽章问题

Parse.com和ios的安装和徽章问题,ios,parse-platform,Ios,Parse Platform,我在ios应用程序parse.com sdk 1.7.2.2上使用安装、推送和徽章 几天前我注意到一件事, 将徽章重置为0的代码,如博文old one中所述 不再工作了, 一切正常,无解析错误,但徽章计数保持在数据库中的旧值 在第二次尝试时,我很努力,但似乎暂时效果更好: PFInstallation *currentInstallation = [PFInstallation currentInstallation]; if (UIApplication.sharedApplication.

我在ios应用程序parse.com sdk 1.7.2.2上使用安装、推送和徽章 几天前我注意到一件事, 将徽章重置为0的代码,如博文old one中所述

不再工作了, 一切正常,无解析错误,但徽章计数保持在数据库中的旧值

在第二次尝试时,我很努力,但似乎暂时效果更好:

PFInstallation *currentInstallation = [PFInstallation currentInstallation];

if (UIApplication.sharedApplication.applicationIconBadgeNumber > 0 || currentInstallation.badge > 0) {
    UIApplication.sharedApplication.applicationIconBadgeNumber = 0;
    currentInstallation.badge = 0;
    [currentInstallation saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error)
    {
        if (!succeeded) [ErrorHandler handle:@"save installation failed" forError:error];
    }];
}
但这不起作用,
有什么想法吗?

这是我的swift代码,它可以工作:

    // Resets badge number in parse
    var installation = PFInstallation.currentInstallation()
    if installation.badge != 0 {
        installation.badge = 0
        installation.saveInBackgroundWithBlock(nil)
    }

    // Resets badge number in app
    if application.applicationIconBadgeNumber > 0 {
        application.applicationIconBadgeNumber = 0
    }

这是我的swift代码,它有效:

    // Resets badge number in parse
    var installation = PFInstallation.currentInstallation()
    if installation.badge != 0 {
        installation.badge = 0
        installation.saveInBackgroundWithBlock(nil)
    }

    // Resets badge number in app
    if application.applicationIconBadgeNumber > 0 {
        application.applicationIconBadgeNumber = 0
    }

installation.badge和application.applicationBadgeNumber设置程序之间似乎存在依赖关系。确保总是先设置安装似乎可以缓解问题

let pcur = PFInstallation.currentInstallation()
        print("current badge = \(pcur.badge)")
        if (pcur.badge != 0){
            pcur.badge = 0
            pcur.saveInBackgroundWithBlock({
                (succeeded,error) in
                print("badge save success = \(succeeded)")
                application.applicationIconBadgeNumber = 0
            })
        }

installation.badge和application.applicationBadgeNumber设置程序之间似乎存在依赖关系。确保总是先设置安装似乎可以缓解问题

let pcur = PFInstallation.currentInstallation()
        print("current badge = \(pcur.badge)")
        if (pcur.badge != 0){
            pcur.badge = 0
            pcur.saveInBackgroundWithBlock({
                (succeeded,error) in
                print("badge save success = \(succeeded)")
                application.applicationIconBadgeNumber = 0
            })
        }

使用Parse 1.14.2、Xcode 8和ios 10,添加:

    UIApplication.shared.applicationIconBadgeNumber = 0

在AppDelegate类的ApplicationIDBecMeactive方法内部,解析服务器上的标记也将重置为零

使用Parse 1.14.2、Xcode 8和ios 10,添加:

    UIApplication.shared.applicationIconBadgeNumber = 0

在AppDelegate类的ApplicationIDBecMeactive方法内部,解析服务器上的标记也将重置为零

这个顺序不起作用,但我更改了顺序,先重置ApplicationOnBadgeNumber,然后再进行解析安装,结果成功了。这听起来很奇怪。你知道为什么改变订单后它会起作用吗?当你看它时,它们是不相关的代码。它是相关的,我在parse.com上的某个地方读到,在installation.badge上操作会触发ios core共享应用程序上的代码。我猜是为了重置计数器,可能那个部分坏了,所以我需要先将其设置为零,然后更改安装对象?它工作了一段时间,现在又失败了,我更新了我的问题,这怎么可能?这在这个顺序下不起作用,但我改变了顺序,先重置applicationBadgeNumber,然后进行解析安装,结果成功了。这听起来很奇怪。你知道为什么改变订单后它会起作用吗?当你看它时,它们是不相关的代码。它是相关的,我在parse.com上的某个地方读到,在installation.badge上操作会触发ios core共享应用程序上的代码。我猜是为了重置计数器,可能那个部分坏了,所以我需要先将其设置为零,然后更改安装对象?它工作了一段时间,现在又失败了,我更新了我的问题,这是怎么可能的?但是,即使用户拒绝推送通知,这段代码也会将安装值保存到解析表中?您是否应该先检查用户是否安装了?但即使用户拒绝推送通知,此代码也会将安装值保存到您的解析表中?您是否应该先检查用户是否已安装?