2

我正在开发带有推送通知和本地通知的 iOS 应用程序,我知道如何从中心删除 1 和所有通知,

使用

[[UIApplication sharedApplication]cancelAllLocalNotifications];

但我的问题是,如果我安排了一些本地通知,

并且收到了推送通知,所以didReceiveRemoteNotification 我在写

[[UIApplication sharedApplication]cancelAllLocalNotifications];用于明确的通知中心,

但它也被清除了我所有的 LocalNotification ......

编辑 如果在 NC 中总共有 3 个通知,即 1 个来自本地通知,两个来自推送(来自服务器)在这种情况下我该如何处理呢?我在 NC 中点击第一个通知(来自服务器)。在这种情况下应该做什么,我的应用程序徽章应该是 2。

那我该怎么办?

4

3 回答 3

3

cancelAllLocalNotifications只会取消本地通知,甚至在名称中!不是您在文档中看到的推送通知:

取消所有计划的本地通知的传递。

由于推送通知是服务器端的,因此在您的应用程序中需要取消。要从通知中心删除推送通知,只需将 设置applicationBadegNumber为 0。

于 2013-10-07T12:14:02.243 回答
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];
    }
}

}

于 2013-10-07T12:49:47.563 回答
0

applicationbadgenumber 由您管理。删除预定通知不会更改该数字。你必须自己管理。不久前我做了一个演示,可能会有所帮助。http://www.youtube.com/watch?v=ixQqZWtn0pg 11:50 开始观看。

于 2013-10-08T16:45:59.537 回答