我已经尝试了3do app,它似乎可以安排非重复通知并删除通知中心的特定通知。它的工作原理如下:当应用程序处于后台时,它们会在通知中心中发送,如果您选择其中一个通知,则会打开并且您可以选择点击“完成”,如果您点击“完成”,则会删除特定通知来自通知中心。如果您没有点按任何内容,通知将保留在通知中心。
这是我自己在自己的一个应用程序中遇到的问题,我无法理解如何从通知中心删除单个通知。如果通知没有重复间隔,那么UIApplication的scheduledLocalNotifications
数组将为空,因此我无法取消该特定通知并将其从通知中心删除。但是,如果通知具有重复间隔,则scheduledLocalNotifications数组将不为空,我可以删除此通知。但是,如果通知不重复,我该如何处理这种情况呢?
答案 0 :(得分:10)
scheduledLocalNotifications array will show as empty even if you have set local notifications
。最好的方法是保留各个本地通知对象。这样您就可以轻松删除它。
设置本地通知时,请像这样保存对象
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
NSString *userDefKey = @"key";
NSData *dataEnc = [NSKeyedArchiver archivedDataWithRootObject:localNotification];
[[NSUserDefaults standardUserDefaults] setObject:dataEnc forKey:userDefKey];
你应该保留密钥
如果要删除特定的本地通知
if([[NSUserDefaults standardUserDefaults] objectForKey:userDefKey]){
NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:userDefKey];
UILocalNotification *localNotif = [NSKeyedUnarchiver unarchiveObjectWithData:data];
[[UIApplication sharedApplication] cancelLocalNotification:localNotif];
}
答案 1 :(得分:1)
Harikrishnan让我走上正轨,但我认为实际上有更好的解决方案,这很简单。
在- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
中,您将引用通知中心中的点击通知。所以你可以这样做:
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
// This removes the notification from notification center
[[UIApplication sharedApplication] cancelLocalNotification:notification];
}