我有一个包含多个本地通知的应用。当我尝试清除所有已发送的通知时,我称之为removeAllDeliveredNotifications
方法。它工作正常,直到ios 11.1
。在ios 11.2
及更高版本中,它无法按预期工作。通知仍保留在通知中心。有人可以帮我解决这个问题。
提前致谢。
答案 0 :(得分: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];
}];
}
虽然我在调试completionHandler时遇到奇怪的行为。如果暂停时间太长(无论这意味着什么),完成处理程序将无法完成(即使在继续进程执行时),导致应用程序无响应。也许完成处理程序会被终止。
答案 1 :(得分:-1)
这似乎是iOS中的一个错误,已在iOS 11.3中修复。
答案 2 :(得分:-2)
您是否尝试过使用此方法:
removeDeliveredNotifications(withIdentifiers:)
您需要传递一个需要删除的所有通知标识符的数组。