对于过去的非重复通知,UIApplication scheduledLocalNotifications是空的

我试了3do应用程序似乎可以安排非重复通知,并从通知中心删除特定的通知。 它的工作原理如下:当应用程序在后台,他们在通知中心交付,如果您select其中一个通知3do会打开,你可以select“完成”,如果你点击“完成”,将删除特定的通知从通知中心。 如果你不点击任何东西,通知将被留在通知中心。

这是我自己在自己的应用程序中遇到的问题,我无法理解如何从通知中心删除单个通知。 如果通知没有重复间隔,则UIApplication的scheduledLocalNotifications数组将为空,因此我无法取消该特定通知,并将其从通知中心删除。 但是,如果通知有重复间隔scheduledLocalNotificationsarrays将不会是空的,我可以删除此通知。 但是,如果通知不重复,我该如何处理这种情况呢?

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]; } 

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]; }