我相信我有类似的问题。当应用程序进入前台时,我试图清除过去的通知以从通知托盘中删除任何旧通知。
我做了这样的事情来获取旧通知并删除它们:
NSArray *activeNotifications = [[UIApplication sharedApplication] scheduledLocalNotifications];
NSArray *pastNotifications = [activeNotifications filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"firDate < %@", [NSDate date]]];
for (UILocalNotification *notification in pastNotifications) {
[[UIApplication sharedApplication] cancelLocalNotification:notification];
}
但是,似乎scheduledLocalNotifications
不包括火灾日期已经过去的位置,即使它们仍然出现在通知中心。
通话cancelAllLocalNotifications
似乎也删除了过去的通知。所以我们可以抓取所有当前的通知,取消所有通知,然后将我们仍然感兴趣的添加回来。
// Grab all the current notifications
NSArray *activeNotifications = [[UIApplication sharedApplication] scheduledLocalNotifications];
// Clear all notifications to remove old notifications
[[UIApplication sharedApplication] cancelAllLocalNotifications];
// Add back the still relevant notifications
for (UILocalNotification *notification in activeNotifications) {
[[UIApplication sharedApplication] scheduleLocalNotification:notification];
}
此外,如果不再需要某些通知,我们可以在添加它们之前对它们进行一些过滤,并且我们可以在应用程序变为活动时获取活动通知,将它们存储在实例变量中,并且仅在应用程序移动到时才将它们添加回来的背景