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

时间:2013-01-08 12:42:56

标签: objective-c ios cocoa-touch uilocalnotification

我已经尝试了3do app,它似乎可以安排非重复通知并删除通知中心的特定通知。它的工作原理如下:当应用程序处于后台时,它们会在通知中心中发送,如果您选择其中一个通知,则会打开并且您可以选择点击“完成”,如果您点击“完成”,则会删除特定通知来自通知中心。如果您没有点按任何内容,通知将保留在通知中心。

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

2 个答案:

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