iphone - Cloudkit:CKNotificationInfo 徽章值永远不会减少

标签 iphone ipad icloud cloudkit cknotification

我为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(每个新通知加 1,下一次为 6)

你们中的任何人都知道如何从 cloudkit 中跟踪徽章的正确数量(在 Objective-C 中)

最佳答案

这是 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)
}

关于iphone - Cloudkit:CKNotificationInfo 徽章值永远不会减少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27245146/

相关文章:

objective-c - 我想在 iOS 7 中访问 iCloud 驱动器文件,可以吗?

ios - 如何避免大CKAssets的重新传输,跟随其他数据更新

iPhone模拟器无法启动?

ipad - 使用 UIModalPresentationFormSheet 的模态视图出现在屏幕外

iphone - 使用MKMapView时如何设置精度和距离过滤器

iphone - UIView只接受特定区域的触摸

ios - 在应用程序内登录 iCloud

ios - Apple Watch 上的 Shazam 如何工作? (麦克风访问)

objective-c - 如何在 iPhone 后台运行我的应用程序?

iphone - iOS 手动增加播放次数、上次播放日期等