Ответ 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. Если пауза слишком длинная (что бы это ни значило), обработчик завершения не завершит (даже при продолжении процесса), что приведет к невосприимчивому приложению. Может быть, обработчик завершения заканчивается.