的 要清除iOS 10应用中的所有本地通知,您应使用以下代码: 强>
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 } else { UIApplication.shared.cancelAllLocalNotifications() }
此代码处理iOS 10.x和所有先前版本的iOS的本地通知的清除。你需要 import UserNotifications 对于iOS 10.x代码。
import UserNotifications
很可能因为通知中心是一个相对较新的功能,Apple并不一定想要推出一个全新的清除通知范例。所以相反,它们是多用途的 [[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0]; 清除所述通知。这可能看起来有点奇怪,Apple可能会在未来提供更直观的方式来做到这一点,但目前它是正式的方式。
[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];
我自己,我用这个片段:
[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0]; [[UIApplication sharedApplication] cancelAllLocalNotifications];
从来没有从通知中心清除所有应用程序的通知。
当您从应用程序注销时,您必须在注销按钮单击方法上使用以下代码行。
这在我的应用程序中完美运行。
也许万一有预定的警报和未清除的应用程序图标徽章。
NSArray *scheduledLocalNotifications = [application scheduledLocalNotifications]; NSInteger applicationIconBadgeNumber = [application applicationIconBadgeNumber]; [application cancelAllLocalNotifications]; [application setApplicationIconBadgeNumber:0]; for (UILocalNotification* scheduledLocalNotification in scheduledLocalNotifications) { [application scheduleLocalNotification:scheduledLocalNotification]; } [application setApplicationIconBadgeNumber:applicationIconBadgeNumber];
如果您有待处理的计划本地通知但不想使用 cancelAllLocalNotifications 要在通知中心清除旧的,您还可以执行以下操作:
cancelAllLocalNotifications
[UIApplication sharedApplication].scheduledLocalNotifications = [UIApplication sharedApplication].scheduledLocalNotifications;
看起来如果你设置了 scheduledLocalNotifications 它清除Notification Center中的旧版本,并通过将其设置为自身,保留挂起的本地通知。
scheduledLocalNotifications
在Swift中,我在AppDelegate中使用以下代码:
func applicationDidBecomeActive(application: UIApplication) { application.applicationIconBadgeNumber = 0 application.cancelAllLocalNotifications() }
只是为了扩展pcperini的答案。正如他所提到的,您需要将以下代码添加到您的 application:didFinishLaunchingWithOptions: 方法;
application:didFinishLaunchingWithOptions:
您 的 也 强> 需要增加然后减少你的徽章 application:didReceiveRemoteNotification: 方法,如果您尝试从消息中心清除消息,以便当用户通过按通知进入您的应用程序时,消息中心也将清除,即;
application:didReceiveRemoteNotification:
[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 1]; [[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0]; [[UIApplication sharedApplication] cancelAllLocalNotifications];
得到它 这里 。它适用于iOS 9
UIApplication *app = [UIApplication sharedApplication]; NSArray *eventArray = [app scheduledLocalNotifications]; for (int i=0; i<[eventArray count]; i++) { UILocalNotification* oneEvent = [eventArray objectAtIndex:i]; //Cancelling local notification [app cancelLocalNotification:oneEvent]; }
如果您将来重复通知,则不希望取消这些通知,您可以通过以下方式清除通知中心中的项目:
func clearNotificationCenter() { UIApplication.sharedApplication().applicationIconBadgeNumber = 1 UIApplication.sharedApplication().applicationIconBadgeNumber = 0 }
当您的应用程序在前台打开时,您无法在收到本地通知后立即调用以下方法清除通知,否则您将收到数百个通知。也许是因为相同的通知再次适用,现在是时候开火了,所以你继续射击,再次申请,开火,申请....:
您需要在AppDelegate中添加以下代码 applicationDidBecomeActive 方法。
applicationDidBecomeActive
在applicationDidBecomeActive中添加对clearNotifications的调用也是有意义的,这样如果应用程序在后台并返回,它也将清除通知。
- (void)applicationDidBecomeActive:(UIApplication *)application { [self clearNotifications]; }