我是否可以通过编程方式从iOS 5通知中心清除应用程序的通知?

我想删除我的应用从iOS 5通知中心发出的旧通知。 我可以这样做吗? 如果是这样,怎么样?

要从通知中心删除通知,只需将您的图标徽章号码设置为零即可。

[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0]; 

这只适用于数字变化,所以如果您的应用程序不使用徽章号码,你必须先设置,然后重置它。

 [[UIApplication sharedApplication] setApplicationIconBadgeNumber:1]; [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0]; 

我使用的一个更直接的方法(并且不需要徽章)是将计划的本地通知数组重置为自身,如下所示:

  UIApplication* application = [UIApplication sharedApplication]; NSArray* scheduledNotifications = [NSArray arrayWithArray:application.scheduledLocalNotifications]; application.scheduledLocalNotifications = scheduledNotifications; 

这将导致任何计划的通知保持有效,而通知中心中存在的所有“旧”通知将被删除。 但是,它也有一些可能在未来的iOS版本中发生变化的感觉,因为我没有看到任何有关此行为的文档。

当然,如果你想删除所有的通知,它只是简单的如下:

  [[UIApplication sharedApplication] cancelAllLocalNotifications]; 

是的,您可以通过致电取消特定或所有本地通知

 [[UIApplication sharedApplication] cancelLocalNotification:...]; 

要么

 [[UIApplication sharedApplication] cancelAllLocalNotifications]; 

对我来说,它只能发送一个本地通知只有像这样的徽章:

  if([UIApplication sharedApplication].applicationIconBadgeNumber == 0) { UILocalNotification *singleLocalPush = [[UILocalNotification alloc] init]; singleLocalPush.fireDate = [NSDate dateWithTimeIntervalSinceNow:1]; singleLocalPush.hasAction = NO; singleLocalPush.applicationIconBadgeNumber = 1; [[UIApplication sharedApplication] scheduleLocalNotification:singleLocalPush]; [singleLocalPush release]; } else { [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0]; } 

而在方法中

  -(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 

我可以再次将徽章设置为0。

如果你想在swift和iOS 10.0中清除通知

 import UserNotifications if #available(iOS 10.0, *) { let center = UNUserNotificationCenter.current() center.removeAllPendingNotificationRequests() // To remove all pending notifications which are not delivered yet but scheduled. center.removeAllDeliveredNotifications() // To remove all delivered notifications }