我为cloudkit设置订阅通知。下面是我的代码:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"TRUEPREDICATE"];
CKSubscription *subscription = [[CKSubscription alloc]
initWithRecordType:recordType
predicate:predicate
options:CKSubscriptionOptionsFiresOnRecordCreation];
CKNotificationInfo *notificationInfo = [CKNotificationInfo new];
notificationInfo.alertLocalizationKey =@"New record in cloudKit";
notificationInfo.shouldBadge = YES;
notificationInfo.soundName = UILocalNotificationDefaultSoundName;
notificationInfo.shouldSendContentAvailable = YES;
subscription.notificationInfo = notificationInfo;
CKContainer *container = [CKContainer defaultContainer];
CKDatabase *publicDatabase = [container publicCloudDatabase];
[publicDatabase saveSubscription:subscription
completionHandler:^(CKSubscription *subscription, NSError *error) {
if (!error)
{
NSLog(@"no error");
}
else
{
NSLog(@"error%@", error);
}
}];
而且工作正常。问题是徽章,它们看起来像是cloudKit没有重置徽章编号,即使我将徽章计数设置为零,徽章编号也会一直增加。
- (void)applicationDidBecomeActive:(UIApplication *)application
{
application.applicationIconBadgeNumber = 0;
}
当应用程序收到一个新的通知时,从0到5(并且每增加一个新的通知,下一次将是6)
你们中的任何人都知道如何从cloudkit (在Objective-C中)跟踪正确的徽章数量
发布于 2014-12-02 17:16:28
这是CloudKit won't reset my badge count to 0的副本
答案是:在处理通知之后,您需要执行一次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-07-28 18:06:15
这将会有所帮助。
CKModifyBadgeOperation *badgeResetOperation = [[CKModifyBadgeOperation alloc] initWithBadgeValue:0];
[badgeResetOperation setModifyBadgeCompletionBlock:^(NSError * operationError) {
if (!operationError) {
[UIApplication sharedApplication].applicationIconBadgeNumber = 0;
}
}];
[[CKContainer defaultContainer] addOperation:badgeResetOperation];
https://stackoverflow.com/questions/27245146
复制相似问题