如何在iOS中仅清除通知

如何在iOS中仅清除通知,ios,objective-c,push-notification,Ios,Objective C,Push Notification,如果用户已将警报样式设置为横幅。他们可以收到多个通知,而无需提示他们清除通知。然后,他们去使用他们的手机,他们说3存储。如果点击最新的一个&它打开了应用程序,我只想清除这一个通知,我还需要去badgeCount- 我如何用下面的代码实现它?目前,它将清除所有我不想要的东西。。。我还注意到有时它会更新徽章编号。但如果我切换回iOS主屏幕,并下拉通知菜单,它仍然在那里 - (void)application:(UIApplication *)application didReceiveRemoteN

如果用户已将警报样式设置为横幅。他们可以收到多个通知,而无需提示他们清除通知。然后,他们去使用他们的手机,他们说3存储。如果点击最新的一个&它打开了应用程序,我只想清除这一个通知,我还需要去badgeCount-

我如何用下面的代码实现它?目前,它将清除所有我不想要的东西。。。我还注意到有时它会更新徽章编号。但如果我切换回iOS主屏幕,并下拉通知菜单,它仍然在那里

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    if([[userInfo valueForKey:@"aps"] valueForKey:@"alert"] != nil) {
        NSString *message = [[userInfo valueForKey:@"aps"] valueForKey:@"alert"];
        if(message != nil) {
            UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Usage Alert"
            message:message  delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil];
            [alertView show];
            [[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];
            [[UIApplication sharedApplication] cancelAllLocalNotifications];

        }
    }
}
你可以加上

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
到你的应用程序代理。这将被调用,您可以在那里使用

[[UIApplication sharedApplication] cancelLocalNotification:notification]; 
删除特定通知并减少徽章计数。

您可以添加

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{


 UIApplication *app = [UIApplication sharedApplication];
 NSInteger badgeNumber = [app applicationIconBadgeNumber];// Take the current badge number
 badgeNumber--;    // decrement by one 
 [app setApplicationIconBadgeNumber:badgeNumber];  // set ne badge number
 [app cancelLocalNotification:notification];    // cancel the received notification. It will clear the notification from banner alos
}
到你的应用程序代理。这将被调用,您可以在那里使用

[[UIApplication sharedApplication] cancelLocalNotification:notification]; 

删除特定通知并减少徽章计数。

我想警告不要打电话
-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{


 UIApplication *app = [UIApplication sharedApplication];
 NSInteger badgeNumber = [app applicationIconBadgeNumber];// Take the current badge number
 badgeNumber--;    // decrement by one 
 [app setApplicationIconBadgeNumber:badgeNumber];  // set ne badge number
 [app cancelLocalNotification:notification];    // cancel the received notification. It will clear the notification from banner alos
}

方法

如果您的计划本地通知带有某个徽章编号,则在输入-didReceiveLocalNotification数毫秒后,将异步设置徽章

对于示例:

-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
    // ^^^ maybe not reset badge to 0!! ^^^
}
另一个代码:

-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
    sleep(1); //waiting for system is set our scheduled badge
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
    // ^^^ most chances for reset badge to 0 ^^^
}
测试代码,触摸屏幕计划本地通知 并计算系统实际设置前的延迟:

输出:

badge set: 41   after 0.000839 sec.
badge set: 9   after 0.000754 sec.
badge set: 56   after 0.076026 sec.
badge set: 17   after 0.069889 sec.
badge set: 8   after 0.056245 sec.
badge set: 71   after 0.120729 sec.
badge set: 28   after 0.122720 sec.
badge set: 17   after 0.000758 sec.
此测试在不同设备上的iOS 4.2/4.3/5.0/6.1中进行

在-didReceiveLocalNotification消息中重置徽章编号时要小心! 仅当本地通知/非远程推送/且应用程序在上处于活动状态时,此选项才为真
接收时刻

我想警告不要打电话

方法

如果您的计划本地通知带有某个徽章编号,则在输入-didReceiveLocalNotification数毫秒后,将异步设置徽章

对于示例:

-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
    // ^^^ maybe not reset badge to 0!! ^^^
}
另一个代码:

-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
    sleep(1); //waiting for system is set our scheduled badge
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
    // ^^^ most chances for reset badge to 0 ^^^
}
测试代码,触摸屏幕计划本地通知 并计算系统实际设置前的延迟:

输出:

badge set: 41   after 0.000839 sec.
badge set: 9   after 0.000754 sec.
badge set: 56   after 0.076026 sec.
badge set: 17   after 0.069889 sec.
badge set: 8   after 0.056245 sec.
badge set: 71   after 0.120729 sec.
badge set: 28   after 0.122720 sec.
badge set: 17   after 0.000758 sec.
此测试在不同设备上的iOS 4.2/4.3/5.0/6.1中进行

在-didReceiveLocalNotification消息中重置徽章编号时要小心! 仅当本地通知/非远程推送/且应用程序在上处于活动状态时,此选项才为真 接收时刻