Подтвердить что ты не робот

UNUserNotificationCenter removeAllDeliveredNotifications не работает в ios 11.2

У меня есть приложение с несколькими локальными уведомлениями. Когда я пытаюсь очистить все отправленные уведомления, я называю этот метод removeAllDeliveredNotifications. Он работает нормально до ios 11.1. В ios 11.2 и выше он работает не так, как ожидалось. Уведомление по-прежнему остается в центре уведомлений. Может кто-то, пожалуйста, помогите мне в этом.

Спасибо заранее.

4b9b3361

Ответ 1

Он по-прежнему работает на нас. Я просто проверил его на iOS 11.2.2. Я использую removeDeliveredNotificationsWithIdentifiers: внутри getDeliveredNotificationsWithCompletionHandler:, вызывая getDeliveredNotificationsWithCompletionHandler в главной теме.

- (void)removePendingNotificationsForObjectID:(SJFObjectID *)objectID {
    __weak __typeof(self) weakSelf = self;
    [self.userNotificationCenter getDeliveredNotificationsWithCompletionHandler:^(NSArray<UNNotification *> *notifications) {
        __strong __typeof(weakSelf) self = weakSelf;
        NSMutableArray <NSString *> *identifiersToRemove = [@[] mutableCopy];
        for (UNNotification *notification in notifications) {
            SJFObjectID *objectIDFromNotification = [self.notificationToObjectIDMarshaller marshalNotification:notification];
            if ([objectID isEqual:objectIDFromNotification]) {
                [identifiersToRemove addObject:notification.request.identifier];
            }
        }
        [self.userNotificationCenter removeDeliveredNotificationsWithIdentifiers:identifiersToRemove];
    }];
}

Хотя я испытываю странное поведение, если я отлаживаю метод завершенияHandler. Если пауза слишком длинная (что бы это ни значило), обработчик завершения не завершит (даже при продолжении процесса), что приведет к невосприимчивому приложению. Может быть, обработчик завершения заканчивается.

Ответ 2

Пробовал ли вы использовать этот метод:

removeDeliveredNotifications(withIdentifiers:)

Вам нужно будет передать массив всех идентификаторов уведомлений, которые необходимо удалить.