从NotificationCenter删除LocalNotifications(iOS 6)

del*_*eme 6 iphone uilocalnotification ios6

我在管理LocalNotifications的一个方面遇到问题 - 在iOS 6中删除单个通知.

在此输入图像描述

我能够创建一个带有文本内容和开火日期的LocalNotification并且它可以工作.

在iOS 5上,通知在主屏幕上显示为带有两个按钮的AlertView,并在触摸后消失.我可以取消通知火[[UIApplication sharedApplication] cancelLocalNotification:theNotification].这里没有问题.

在iOS 6中,通知发生在Notificaton Center中,如上所示.如果我使用取消它[[UIApplication sharedApplication] cancelLocalNotification:theNotification],它将不会触发 - 它可以工作.但在它发射之后......

我的问题:

我无法从通知中心删除此单个已解雇的通知.例如,我希望通知在触摸后消失,或者在应用程序内部执行某些操作后消失.

我尝试了什么:

  • 使用[[UIApplication sharedApplication] cancelLocalNotification:theNotification]- 取消通知触发(实际上没有必要,因为通知已经触发),但不会删除通知中心发出的通知
  • [[UIApplication sharedApplication] scheduledLocalNotifications]数组中删除项目- 不起作用,因为无论设置多少(工作!)通知,此函数总是返回空数组(有人知道为什么吗?)

我现在在做什么

我正在删除所有通知[[UIApplication sharedApplication] cancelAllLocalNotifications]- 它取消它们并从通知中心删除,然后创建它们,没有我想要擦除的通知.

正如你所看到的,这是相当愚蠢和冗余的解决方案,但到目前为止我找不到更好的结果.

有什么建议?

Wol*_*ine 1

试试这个......可能会有帮助......从您想要清除所有通知的位置编写此代码。

\n\n
 \xc2\xa0 \xc2\xa0[[UIApplication sharedApplication] setApplicationIconBadgeNumber:1];\n    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];\n    [[UIApplication sharedApplication] cancelAllLocalNotifications];\n
Run Code Online (Sandbox Code Playgroud)\n\n

删除单个通知

\n\n

您可以从以下位置获取一系列预定通知:@property(nonatomic,copy) NSArray *scheduledLocalNotifications

\n\n

通过您选择的索引号获取您想要的通知,然后将 UILocalNotification* 传递给 - (void)cancelLocalNotification:(UILocalNotification *)notification.

\n\n

您可以在本地通知的用户信息中保存唯一的键值。\n获取所有本地通知,循环遍历数组并删除特定通知。

\n\n

代码如下,

\n\n
UIApplication *app = [UIApplication sharedApplication];\nNSArray *eventArray = [app scheduledLocalNotifications];\nfor (int i=0; i<[eventArray count]; i++)\n{\n    UILocalNotification* oneEvent = [eventArray objectAtIndex:i];\n    NSDictionary *userInfoCurrent = oneEvent.userInfo;\n    NSString *uid=[NSString stringWithFormat:@"%@",[userInfoCurrent valueForKey:@"uid"]];\n    if ([uid isEqualToString:uidtodelete])\n    {\n        //Cancelling local notification\n        [app cancelLocalNotification:oneEvent];\n        break;\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n