11

我有一个包含多个本地通知的应用程序。当我尝试清除所有传递的通知时,我调用此removeAllDeliveredNotifications方法。它工作正常,直到ios 11.1。在ios 11.2及以上,它不能按预期工作。通知仍保留在通知中心。有人可以帮我解决这个问题。

提前致谢。

4

3 回答 3

2

它仍然为我们工作。我刚刚在 iOS 11.2.2 上检查过。我正在使用removeDeliveredNotificationsWithIdentifiers:inside 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];
    }];
}

虽然如果我正在调试完成处理程序,我会遇到奇怪的行为。如果暂停时间过长(无论这意味着什么),完成处理程序将无法完成(即使在继续执行进程时),从而导致应用程序无响应。也许完成处理程序被终止。

于 2018-01-15T13:10:32.540 回答
-1

这似乎是 iOS 11.3 中修复的一个错误。

于 2018-03-30T20:12:21.300 回答
-2

您是否尝试过使用此方法:

removeDeliveredNotifications(withIdentifiers:)

您将需要传递一个包含您需要删除的所有通知标识符的数组。

于 2018-01-10T11:56:32.663 回答