3

我已经试用了3do 应用程序,它似乎能够安排非重复通知并删除来自通知中心的特定通知。它的工作原理是这样的:当应用程序处于后台时,它们会在通知中心传递,如果您选择其中一个通知,3do 将打开并且您可以选择点击“完成”,如果您点击“完成”,则特定通知将被删除从通知中心。如果您不点击任何内容,通知将留在通知中心。

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

4

2 回答 2

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

}
于 2013-01-08T12:58:05.947 回答
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];
}
于 2013-01-08T13:20:48.263 回答