我正在使用推送通知和本地通知开发iOS应用,我知道如何从中心删除1和所有通知,
使用
[[UIApplication sharedApplication]cancelAllLocalNotifications];
但我的问题是,如果我安排了一些本地通知,
并且推送通知已在didReceiveRemoteNotification
中到达
我写的是
[[UIApplication sharedApplication]cancelAllLocalNotifications];
用于明确通知中心,
但它也清除了我的所有LocalNotification ......
修改 如果NC中有3个通知,即1来自本地通知,2个来自push(来自服务器),在这种情况下如何处理它?我点击NC的第一个通知(来自服务器)。在这种情况下应该做什么,我的应用徽章应该是2。
那我该怎么办?答案 0 :(得分:3)
cancelAllLocalNotifications
只取消本地通知,即使在名称中也是如此!您可以在文档中阅读推送通知:
取消所有预定的本地通知的传递。
由于推送通知是服务器端,因此您的应用中无法取消。要从通知中心删除推送通知,只需将applicationBadegNumber
设置为0。
答案 1 :(得分:2)
有一个选项,每个通知都包含一个字典,因此当您创建任何本地通知时,在字典中添加任何键,指定此通知用于本地通知。因此,您可以检查它是否不是我的本地通知然后我将删除它。
-(void)scheduleLocalNotification{
[self cancelAlarm]; //clear any previous alarms
UILocalNotification *alarm = [[UILocalNotification alloc] init];
alarm.alertBody = @"alert msg";
alarm.fireDate = [NSDate dateWithTimeInterval:alarmDuration sinceDate:startTime];
alarm.soundName = UILocalNotificationDefaultSoundName;
NSDictionary *userInfo = [NSDictionary dictionaryWithObject:@"localNotification" forKey:@"localNotification"];
alarm.userInfo = userInfo;
[[UIApplication sharedApplication] scheduleLocalNotification:alarm];
}
-(void)cancelNotification{
for (UILocalNotification *notification in [[[UIApplication sharedApplication] scheduledLocalNotifications] copy]){
NSDictionary *userInfo = notification.userInfo;
if (![self.key isEqualToString:[userInfo objectForKey:localNotification]]){
[[UIApplication sharedApplication] cancelLocalNotification:notification];
}
}
}
答案 2 :(得分:0)
applicationbadgenumber由您管理。删除预定通知不会更改该号码。你必须自己管理。我前段时间做了一个可能有帮助的演讲。 http://www.youtube.com/watch?v=ixQqZWtn0pg在11:50开始观看。