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

时间:2011-10-14 21:09:00

标签: ios5

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

5 个答案:

答案 0 :(得分:75)

要从通知中心删除通知,只需将图标徽章编号设置为零。

[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];

这仅在数字更改时有效,因此如果您的应用不使用您必须先设置的徽章编号,请重置它。

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

答案 1 :(得分:19)

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

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

这会导致任何预定通知仍然有效,同时删除通知中心中存在的所有“旧”通知。但是,它在iOS的未来版本中也会有一些可能会改变的感觉,因为我没有看到任何关于此行为的文档。

当然,如果您要删除所有通知,则只需以下内容:

  [[UIApplication sharedApplication] cancelAllLocalNotifications];

答案 2 :(得分:3)

是的,您可以通过致电

取消特定或所有本地通知
[[UIApplication sharedApplication] cancelLocalNotification:...]; 

[[UIApplication sharedApplication] cancelAllLocalNotifications];

答案 3 :(得分:2)

如果您想在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
}

答案 4 :(得分:1)

对我而言,它仅适用于发送仅包含以下徽章的本地通知:

    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。