Ios 以编程方式清除已显示的本地通知
我需要以编程方式从通知中心清除已显示的本地通知。下面我实现了建议的解决方案,但问题是这个示例中的Ios 以编程方式清除已显示的本地通知,ios,objective-c,uilocalnotification,Ios,Objective C,Uilocalnotification,我需要以编程方式从通知中心清除已显示的本地通知。下面我实现了建议的解决方案,但问题是这个示例中的eventArray总是有0个元素。当我向下滑动到display Notification Center时,我会看到我以前创建的4个通知。所以在本例中,我希望这个数组有4个元素,但它有0个元素。你知道为什么会这样吗?我在iOS 8.3和9.2.1上试过,它们的数组都是0 iOS有两种显示本地通知的方式: NSArray *eventArray = [[UIApplication sharedAppli
eventArray
总是有0个元素。当我向下滑动到display Notification Center时,我会看到我以前创建的4个通知。所以在本例中,我希望这个数组有4个元素,但它有0个元素。你知道为什么会这样吗?我在iOS 8.3和9.2.1上试过,它们的数组都是0
iOS有两种显示本地通知的方式:
NSArray *eventArray = [[UIApplication sharedApplication] scheduledLocalNotifications];
for (int i=0; i<[eventArray count]; i++) {
UILocalNotification* oneEvent = [eventArray objectAtIndex:i];
NSDictionary *userInfoCurrent = oneEvent.userInfo;
if ([userInfoCurrent isEqualToDictionary:uniqueDictIdentifier1]) {
[[UIApplication sharedApplication] cancelLocalNotification:oneEvent];
break;
}
}
- 您不能从左向右滑动通知
- 您可以从右向左滑动通知(从列表中删除单个通知)
- 您可以单击通知,然后您的应用程序将启动,通知将从通知中心删除(由iOS系统处理)
- 仅当您从iPhone/iPad设置中启用此设置时可用:
- 您可以从左向右滑动通知(您的应用程序将启动,由iOS处理)在这种情况下,不会删除来自通知中心的通知(iOS不会删除它,并且不允许在通知中心向用户显示通知后从代码中删除单个通知)
- 您可以从右向左滑动通知(从列表中删除单个通知,由iOS处理。通知中心通知也会被删除,由iOS处理)
- 您不能单击通知
UILocalNotification* localNotification = [[UILocalNotification alloc] init];
localNotification.alertBody = @"1";
localNotification.alertTitle = @"1";
localNotification.userInfo = uniqueDictIdentifier1;
[[UIApplication sharedApplication] presentLocalNotificationNow:localNotification];
UILocalNotification *localNotification2 = [[UILocalNotification alloc] init];
localNotification2.alertBody = @"2";
localNotification2.alertTitle = @"2";
localNotification2.userInfo = uniqueDictIdentifier2;
[[UIApplication sharedApplication] presentLocalNotificationNow:localNotification2];
....
//2 more notifications are created like this
然后是过滤所有通知的代码:
NSArray *eventArray = [[UIApplication sharedApplication] scheduledLocalNotifications];
for (int i=0; i<[eventArray count]; i++) {
UILocalNotification* oneEvent = [eventArray objectAtIndex:i];
NSDictionary *userInfoCurrent = oneEvent.userInfo;
if ([userInfoCurrent isEqualToDictionary:uniqueDictIdentifier1]) {
[[UIApplication sharedApplication] cancelLocalNotification:oneEvent];
break;
}
}
NSArray*eventArray=[[UIApplication sharedApplication]ScheduledLocalNotification];
用于(int i=0;i用于保存唯一id的通知
NSDictionary * infoDict = @{ @"alarmUiqueId" : uID,
};
NSLog(@"%@",infoDict);
NSDateComponents *comp = [[NSCalendar currentCalendar] components:NSCalendarUnitSecond
fromDate:fireDate];
fireDate = [fireDate dateByAddingTimeInterval:-comp.second];
UILocalNotification *localNotif = [[UILocalNotification alloc] init];
localNotif.fireDate = fireDate;
localNotif.timeZone = [NSTimeZone localTimeZone];
localNotif.alertBody = desString;
localNotif.userInfo = infoDict;
localNotif.repeatInterval = NSCalendarUnitDay;
[[UIApplication sharedApplication] scheduleLocalNotification:localNotif]
要删除一个paritcular通知,请编写以下代码
NSArray *notificationArray = [[UIApplication sharedApplication] scheduledLocalNotifications];
for(UILocalNotification *notification in notificationArray)
{
NSLog(@"%@",[notification.userInfo valueForKey:@"alarmUiqueId"]);
if ([[notification.userInfo valueForKey:@"alarmUiqueId"] isEqualToNumber: health.uniqueId])
{
[[UIApplication sharedApplication] cancelLocalNotification:notification] ;
}
}
用于保存唯一id的通知
NSDictionary * infoDict = @{ @"alarmUiqueId" : uID,
};
NSLog(@"%@",infoDict);
NSDateComponents *comp = [[NSCalendar currentCalendar] components:NSCalendarUnitSecond
fromDate:fireDate];
fireDate = [fireDate dateByAddingTimeInterval:-comp.second];
UILocalNotification *localNotif = [[UILocalNotification alloc] init];
localNotif.fireDate = fireDate;
localNotif.timeZone = [NSTimeZone localTimeZone];
localNotif.alertBody = desString;
localNotif.userInfo = infoDict;
localNotif.repeatInterval = NSCalendarUnitDay;
[[UIApplication sharedApplication] scheduleLocalNotification:localNotif]
要删除一个paritcular通知,请编写以下代码
NSArray *notificationArray = [[UIApplication sharedApplication] scheduledLocalNotifications];
for(UILocalNotification *notification in notificationArray)
{
NSLog(@"%@",[notification.userInfo valueForKey:@"alarmUiqueId"]);
if ([[notification.userInfo valueForKey:@"alarmUiqueId"] isEqualToNumber: health.uniqueId])
{
[[UIApplication sharedApplication] cancelLocalNotification:notification] ;
}
}
我的理解如下:
您无法使用scheduledNotifications
获取已通知的LocalNotification的信息
我的解决方案是,只需将UILocalNotification实例保留在应用程序中的singleton对象中,并在需要从通知中心删除时调用实例cancelLocalNotification
这可能是你的帮助吗?我的理解如下:
您无法使用scheduledNotifications
获取已通知的LocalNotification的信息
我的解决方案是,只需将UILocalNotification实例保留在应用程序中的singleton对象中,并在需要从通知中心删除时调用实例cancelLocalNotification
这可能是您的帮助吗?我编辑了我的问题,以进一步解释问题所在。粗体文本解释了在何种情况下需要删除单个通知。链接的stackoverflow问题具有删除单个通知的代码。是否要删除特定通知?是的,我要删除单个通知这已经显示在通知中心。我刚刚下载了Gmail应用程序,并确认它与我的应用程序存在相同的问题。因此,我猜这更多是一个iOS限制,而不是我的应用程序中的错误。保存通知时,你必须传递唯一id,而不是在删除功能中,你必须获取uinotification数组并检查是否存在错误tification.userinfo等于“唯一id”然后取消通知。我正在这样做,但如果您没有阅读问题,我的问题是notificationArray
包含0个元素。我可以看到屏幕上显示了4个本地通知。我编辑了我的问题,以进一步解释问题所在。粗体文本说明了在何种情况下我需要取消通知删除单个通知。链接的stackoverflow问题具有删除单个通知的代码。是否要删除特定通知?是的,我要删除已显示在通知中心的单个通知。我刚刚下载了Gmail应用程序,并确认它与我的应用程序有相同的问题。因此我猜这是更多的是iOS限制,而不是我的应用程序中的错误。保存通知时,您必须传递唯一id,而不是在删除功能中,您必须获取uinotification数组并检查notification.userinfo是否等于“唯一id”然后取消通知。我正在这样做,但如果您没有阅读问题,我的问题是notificationArray
包含0个元素。我可以看到屏幕上显示了4个本地通知。