我尝试了很多方法,但似乎无法重置来自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];再一次没有运气..。
如有任何建议,我们将不胜感激!谢谢,克里斯
发布于 2014-09-22 14:33:15
在处理您的通知后,您需要执行CKModifyBadgeOperation 。
这是我的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)
}发布于 2016-02-11 06:46:53
如果没有设置容器,那么徽章和通知操作就会失败。因为您没有使用完成块,所以您没有看到错误(您使用的是默认的NSOperation完成块,它是错误的,并且没有任何错误参数)。查看这些操作的标头,以了解完成块语法。
更好的方法是通过addOperation方法将操作添加到容器,这会在运行操作之前在操作上设置容器。此外,它还在内部队列上运行,这具有额外的优点,它可以防止并发运行多个操作,这可能会导致冲突。
https://stackoverflow.com/questions/25120070
复制相似问题