7

いろいろ試してみましたが、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];

そしてまた運が悪い...

どんな提案でも大歓迎です!ありがとう、クリス

4

2 に答える 2

13

通知を処理した後、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)
}
于 2014-09-22T06:33:14.940 に答える
0

コンテナーを設定しないと、バッジと通知の操作は失敗します。完了ブロックを使用していないため、エラーは表示されません (デフォルトの NSOperation 完了ブロックを使用していますが、これは間違ったブロックであり、エラー パラメータはありません)。これらの操作のヘッダーを見て、完了ブロックの構文を確認してください。

より良い方法は、addOperation メソッドを使用してコンテナーに操作を追加することです。これにより、操作を実行する前に、操作にコンテナーが本質的に設定されます。また、競合につながる可能性のある複数の操作を同時に実行できないという追加の利点を持つ内部キューで実行されます。

于 2016-02-10T22:46:53.140 に答える