如何在iPhone上删除本地通知

18

我正在制作一款设置本地通知的应用程序。

很幸运,我已经成功设置了本地通知,但我不知道如何删除由我的应用程序设置的通知。

XCode提供了通过removeAllNotifications删除所有通知的功能,但无法删除应用程序设置的特定通知。

非常感谢。


2
请查看此链接:https://dev59.com/iGw15IYBdhLWcg3w4_tL - pedroprates
5个回答

71
你重复提了这个问题,所以我会在两个问题上都回答,希望你能看到:
使用以下代码取消所有本地通知:
[[UIApplication sharedApplication] cancelAllLocalNotifications];

使用以下代码取消一个本地通知:

[[UIApplication sharedApplication] cancelLocalNotification:theNotification];

其中theNotification是一个UILocalNotification对象,因此要取消特定通知,您需要将其保存在UILocalNotification中。


您可以在苹果文档中找到更多内容。


嗨,Thomas,你会把那个通知对象保存在哪里或获取它呢? - Rafael Sanches
如果您不想取消所有通知,那么您需要在某个地方将您可能想要取消的 NSNotification 保留在内存中。也许是一个适当的类的属性,它持有一个 NSNotifications 数组。 - winsmith
Thomas,我已经通过序列化UILocalNotification对象找到了答案。 - Rafael Sanches

12
[[UIApplication sharedApplication] cancelLocalNotification:notification]

2

您好,看看 Swift 中如何创建本地通知:

var notif = UILocalNotification()
        notif.timeZone = NSTimeZone.defaultTimeZone()

        let morningOfChristmasComponents = NSDateComponents()
        morningOfChristmasComponents.year = 2016
        morningOfChristmasComponents.month = 03
        morningOfChristmasComponents.day = 30
        morningOfChristmasComponents.hour = 15
        morningOfChristmasComponents.minute = 59
        morningOfChristmasComponents.second = 0

        let morningOfChristmas = NSCalendar.currentCalendar().dateFromComponents(morningOfChristmasComponents)!

        let formatter = NSDateFormatter()
        formatter.dateStyle = NSDateFormatterStyle.LongStyle
        formatter.timeStyle = .MediumStyle

        let dateString = formatter.stringFromDate(morningOfChristmas)

        notif.fireDate = morningOfChristmas
        notif.alertBody = "alarma wolf"
        notif.userInfo = ["identificador": "wolf"]
        UIApplication.sharedApplication().scheduleLocalNotification(notif)
        print("alarma fijada para \(dateString)")

loo userInfo是您本地通知的标识符。现在,如果您想要删除特定的本地通知,请尝试:

var uidtodelete = "wolf"
        var app:UIApplication = UIApplication.sharedApplication()
        for oneEvent in app.scheduledLocalNotifications! {
            var notification = oneEvent as UILocalNotification
            let userInfoCurrent = notification.userInfo! as! [String:AnyObject]
            let uid = userInfoCurrent["identificador"]! as! String
            if uid == uidtodelete {
                //Cancelling local notification
                app.cancelLocalNotification(notification)
                break;
            }
        }

请看上面的方法,userInfoCurrent是您本地通知的标识符,uitodelete是包含您要删除的特定本地通知键的字符串...

如果您想删除所有本地通知,可以使用

UIApplication.sharedApplication().cancelAllLocalNotifications()

好的,希望这些信息能为您或他人提供帮助。

再见,谅解我的糟糕英语。


1

您可以通过以下函数取消通知:[[UIApplication sharedApplication] cancelNotification:object of your UILocalNotification]


这并不会将应用图标上带圆圈的数字1去掉。有没有办法去掉它? - coolcool1994

0

如果您正在使用自iOS 10.0起提供的用户通知框架,并且您提供的标识符为foo

UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: "foo")
UNUserNotificationCenter.current().removeDeliveredNotifications(withIdentifiers: "foo")

或者在 Objective-C 中:

[[UNUserNotificationCenter currentNotificationCenter] removePendingNotificationRequestsWithIdentifiers:@[@"foo"]];
[[UNUserNotificationCenter currentNotificationCenter] removeDeliveredNotificationsWithIdentifiers:@[@"foo"]];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接