Push notification CloudKit赢得';t将我的徽章计数重置为0

Push notification CloudKit赢得';t将我的徽章计数重置为0,push-notification,apple-push-notifications,ios8,cloudkit,cksubscription,Push Notification,Apple Push Notifications,Ios8,Cloudkit,Cksubscription,我尝试了很多方法,但似乎无法从cloudKit发出的通知中重置徽章计数。 还有其他人遇到过这个问题吗。以下是我尝试过的: 1) 将本地徽章计数设置为0 application.applicationIconBadgeNumber = 0; (temporarily removes the badge count). 没有运气 2) 呼叫服务器以清除徽章计数 CKModifyBadgeOperation *oper = [[CKModifyBadgeOperation alloc] ini

我尝试了很多方法,但似乎无法从cloudKit发出的通知中重置徽章计数。 还有其他人遇到过这个问题吗。以下是我尝试过的:

1) 将本地徽章计数设置为0

  application.applicationIconBadgeNumber = 0; (temporarily removes the badge count).
没有运气

2) 呼叫服务器以清除徽章计数

 CKModifyBadgeOperation *oper = [[CKModifyBadgeOperation alloc] initWithBadgeValue:0];
  [oper start];
没有运气

3) 拉入所有通知更改并将其标记为全部已读

NSMutableArray *array = [NSMutableArray array];
CKFetchNotificationChangesOperation *operation = [[CKFetchNotificationChangesOperation alloc] initWithPreviousServerChangeToken:nil];
operation.notificationChangedBlock = ^(CKNotification *notification) {
    [array addObject:notification.notificationID];
};
operation.completionBlock = ^{
        CKMarkNotificationsReadOperation *op = [[CKMarkNotificationsReadOperation alloc] initWithNotificationIDsToMarkRead:array];
        [op start];
};
[operation start];
又一次没有运气

如有任何建议,将不胜感激! 谢谢
Chris

处理通知后,您需要执行ckModifyBadge操作

这是我的Swift函数,我在将所有通知标记为已读后调用它。 我将操作添加到defaultContainer中,而不是仅仅启动它-我想知道这会有什么不同

func resetBadgeCounter() {
    let badgeResetOperation = CKModifyBadgeOperation(badgeValue: 0)
    badgeResetOperation.modifyBadgeCompletionBlock = { (error) -> Void in
        if error != nil {
            println("Error resetting badge: \(error)")
        }
        else {
            UIApplication.sharedApplication().applicationIconBadgeNumber = 0
        }
    }
    CKContainer.defaultContainer().addOperation(badgeResetOperation)
}

如果未设置容器,则标记和通知操作将失败。因为您没有使用完成块,所以没有看到错误(您使用的默认NSOperation完成块是错误的,并且没有任何错误参数)。查看这些操作的标题以查看完成块语法


更好的方法是通过addOperation方法将操作添加到容器中,这会在运行操作之前在操作上设置容器。此外,它还运行在一个内部队列上,这有一个额外的优点,它可以防止同时运行多个操作,这可能会导致冲突。

我也有同样的问题,但不幸的是没有解决方案。运行CKModifyBadgeOperation时出现“内部服务器错误”。是的,但现在CKModifyBadgeOperation已被弃用。附近有工作吗?这是保留其徽章编号的CloudKit通知的一个问题。在设备上重置它不起作用。@PeterB.Kramer您找到这个不推荐使用的API的任何解决方案/替代方案了吗?没有。我仍然使用它作为不推荐使用的API。