【问题标题】:Can I programmatically clear my app's notifications from the iOS 5 Notification Center?我能否以编程方式从 iOS 5 通知中心清除我的应用程序通知?
【发布时间】:2011-10-14 21:08:59
【问题描述】:

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

【问题讨论】:

    标签: ios5


    【解决方案1】:

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

    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
    

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

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

    【讨论】:

    • 这行得通...您必须将其设置为某个值,然后重置为 0...谢谢@voidStern
    • @voidStern:你太棒了...:)
    • 很好的答案,我尝试了一切,这很有效。如果更适合您,您也可以使用点语法:) [UIApplication sharedApplication].applicationIconBadgeNumber = 1; [UIApplication sharedApplication].applicationIconBadgeNumber = 0;
    • 在 iOS >= 7 上仍然需要这个吗?
    【解决方案2】:

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

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

    这意味着所有计划的通知仍然有效,而通知中心中存在的所有“旧”通知都将被删除。但是,它也让人感觉在未来的 iOS 版本中可能会发生一些变化,因为我还没有看到任何关于这种行为的文档。

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

      [[UIApplication sharedApplication] cancelAllLocalNotifications];
    

    【讨论】:

      【解决方案3】:

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

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

      [[UIApplication sharedApplication] cancelAllLocalNotifications];
      

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

              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。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-10-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-01-30
            • 2012-08-13
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多