Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在iphone中取消本地通知_Iphone - Fatal编程技术网

如何在iphone中取消本地通知

如何在iphone中取消本地通知,iphone,Iphone,我正在制作需要设置通知的应用程序,谢天谢地,我无法设置本地通知,但我不知道如何删除此应用程序设置的通知(我的应用程序)。xcode确实提供删除removeAllNotifications的功能,但您无法删除应用程序设置的选定通知您可以调用[[UIApplication sharedApplication]cancelLocalNotification:notification]取消通知。由于本地通知符合NSCoding协议,因此可以存储和检索这些通知,以备以后取消。我知道这篇文章很旧,但希望此解

我正在制作需要设置通知的应用程序,谢天谢地,我无法设置本地通知,但我不知道如何删除此应用程序设置的通知(我的应用程序)。xcode确实提供删除removeAllNotifications的功能,但您无法删除应用程序设置的选定通知

您可以调用
[[UIApplication sharedApplication]cancelLocalNotification:notification]
取消通知。由于本地通知符合
NSCoding
协议,因此可以存储和检索这些通知,以备以后取消。

我知道这篇文章很旧,但希望此解决方案能帮助某些人

NSArray *notificationArray = [[UIApplication sharedApplication] scheduledLocalNotifications];
    for(UILocalNotification *notification in notificationArray){
        if ([notification.alertBody isEqualToString:@"your alert body"]  && (notification.fireDate == your alert date time)) {
            // delete this notification
            [[UIApplication sharedApplication] cancelLocalNotification:notification] ;
        }
    }

我正在比较警报正文和日期时间,只是为了确保删除的通知正确,因为有可能两个或多个通知具有相同的警报正文或时间。

iOS 10和iOS 10以下版本以及Xcode 8 beta 2中的本地通知

pragma标记-在日期之前计算 要设置多个通知,请执行以下操作: iOS 10,添加不同的requestWithIdentifier

pragma标记-定位超过iOS 10 要在iOS 10下设置多个通知,请添加不同的userinfo

pragma标记-定位小于iOS 10 pragma标记-删除相关程序本地通知
-(iAction)删除提醒:(id)发件人{
UIButton*senderButton=(UIButton*)发送方;
_selectedRow=senderButton.tag;
NSIndexPath*indexPath=[NSIndexPath indexPathForRow:senderButton.tag片段:0];//如果节为0
提醒单元格*单元格=(提醒单元格*)[\u tableView cellforrowatinexpath:indexPath];
_eventname=[[u eventArray objectAtIndex:indexath.row]objectForKey:@“event_name”];
_eventdate=[[u eventArray objectAtIndex:indexath.row]objectForKey:@“事件日期”];
_eventtime=[[u eventArray objectAtIndex:indexath.row]objectForKey:@“event_st”];
如果([[UIDevice currentDevice]systemVersion]floatValue]>10.0f){
#如果XCODE_版本_大于_或等于_至_8
UNUserNotificationCenter*中心=[UNUserNotificationCenter currentNotificationCenter];
//删除所有本地通知:
[center removePendingNotificationRequestsWithIdentifiers:@[_eventname]];
#恩迪夫
}否则{
NSLog(@“删除ios 10以下的通知”);
UIApplication*app=[UIApplication sharedApplication];
NSArray*eventArray=[app ScheduledLocalNotification];

for(int i=0;i表示您的输入,但我应该在方法[UIApplicationsharedApplication]中添加什么传入通知cancelLocalNotification:notification]再次感谢您,您必须在某个时间点创建通知对象来计划它,所以请使用该对象!一旦您创建了通知对象,您可以使用NSCoding协议将其保存到磁盘,稍后再加载(即下一次应用程序启动)供以后取消。您可以在此处找到答案:您应该使用
isEqualToDate:
而不是
=
-(void) calculateBeforedays:(int)_day hours:(int)_hours minutes:(int) _minutes { //_fir:(int)_firecount
    
    //Get Predefined Future date
    NSString *dateString =  [NSString stringWithFormat:@"%@T%@:00.000Z",_eventdate,_eventtime];
    NSLog(@"dateString %@",dateString);
    
    //    NSLog(@"_firecount %d",_firecount);
    //    //Get Predefined Future date
    //    NSString *dateString =  [NSString stringWithFormat:@"2016-12-31T12:%d:00.000Z",_firecount];
    //    NSLog(@"dateString %@",dateString);
    
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZ"];
    NSDate *marrigeDate = [dateFormatter dateFromString:dateString];
    
    
    // Set reminder date before marrige date
    int setDay = _day;
    int setHours = _hours;
    int setMins = _minutes;
    float milliseconds =   (setDay * 24 * 60 * 60 ) + (setHours * 60 * 60 ) + (setMins * 60 );
    
    
    NSDate *someDateInUTC = [NSDate date];
    NSTimeInterval timeZoneSeconds = [[NSTimeZone localTimeZone] secondsFromGMT];
    NSDate *dateInLocalTimezone = [someDateInUTC dateByAddingTimeInterval:timeZoneSeconds];
    
    //Get Current date
    NSDate *currentDate = dateInLocalTimezone;
    NSTimeInterval marigeTimeInterval = [marrigeDate timeIntervalSinceDate:currentDate];
    
    //Get difference between time
    NSTimeInterval timeIntervalCountDown = marigeTimeInterval - milliseconds;
    
    //Set perticulater timer
    NSDate *timerDate = [NSDate dateWithTimeIntervalSinceNow:timeIntervalCountDown];
    [self triggerNotification:timerDate];
    
}

#pragma mark- Trigger Reminders
- (void)triggerNotification:(NSDate *) reminderDate {
    
    if([[[UIDevice currentDevice] systemVersion] floatValue] > 10.0f){
        // create actions
#if XCODE_VERSION_GREATER_THAN_OR_EQUAL_TO_8
        UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
        // create actions
        UNNotificationAction *acceptAction = [UNNotificationAction actionWithIdentifier:@"com.inviteapp.yes"
                                                                                  title:@"Accept"
                                                                                options:UNNotificationActionOptionForeground];
        UNNotificationAction *declineAction = [UNNotificationAction actionWithIdentifier:@"com.inviteapp.no"
                                                                                   title:@"Decline"
                                                                                 options:UNNotificationActionOptionDestructive];
        UNNotificationAction *snoozeAction = [UNNotificationAction actionWithIdentifier:@"com.inviteapp.snooze"
                                                                                  title:@"Snooze"
                                                                                options:UNNotificationActionOptionDestructive];
        NSArray *notificationActions = @[ acceptAction, declineAction, snoozeAction ];
        
        // create a category
        UNNotificationCategory *inviteCategory = [UNNotificationCategory categoryWithIdentifier:CYLInviteCategoryIdentifier actions:notificationActions intentIdentifiers:@[] options:UNNotificationCategoryOptionCustomDismissAction];
        
        NSSet *categories = [NSSet setWithObject:inviteCategory];
        
        // registration
        [center setNotificationCategories:categories];
#endif
    }
    else if([[[UIDevice currentDevice] systemVersion] floatValue] > 8.0f){
        // create actions
        UIMutableUserNotificationAction *acceptAction = [[UIMutableUserNotificationAction alloc] init];
        acceptAction.identifier = @"com.inviteapp.yes";
        acceptAction.title = @"Accept";
        acceptAction.activationMode = UIUserNotificationActivationModeBackground;
        acceptAction.destructive = NO;
        acceptAction.authenticationRequired = NO; //If YES requies passcode, but does not unlock the device
        
        UIMutableUserNotificationAction *declineAction = [[UIMutableUserNotificationAction alloc] init];
        declineAction.identifier = @"com.inviteapp.no";
        acceptAction.title = @"Decline";
        acceptAction.activationMode = UIUserNotificationActivationModeBackground;
        declineAction.destructive = YES;
        acceptAction.authenticationRequired = NO;
        
        UIMutableUserNotificationAction *snoozeAction = [[UIMutableUserNotificationAction alloc] init];
        snoozeAction.identifier = @"com.inviteapp.snooze";
        acceptAction.title = @"Snooze";
        snoozeAction.activationMode = UIUserNotificationActivationModeBackground;
        snoozeAction.destructive = YES;
        snoozeAction.authenticationRequired = NO;
        
        // create a category
        UIMutableUserNotificationCategory *inviteCategory = [[UIMutableUserNotificationCategory alloc] init];
        inviteCategory.identifier = CYLInviteCategoryIdentifier;
        NSArray *notificationActions = @[ acceptAction, declineAction, snoozeAction ];
        
        [inviteCategory setActions:notificationActions forContext:UIUserNotificationActionContextDefault];
        [inviteCategory setActions:notificationActions forContext:UIUserNotificationActionContextMinimal];
        
        // registration
        NSSet *categories = [NSSet setWithObject:inviteCategory];
        UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert;
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:types categories:categories];
        [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
    }
    
    /// 2. request authorization for localNotification
    [self registerNotificationSettingsCompletionHandler:^(BOOL granted, NSError * _Nullable error) {
        if (!error) {
            NSLog(@"request authorization succeeded!");
        }
    }];
    
    
    if([[[UIDevice currentDevice] systemVersion] floatValue] > 10.0f){
#if XCODE_VERSION_GREATER_THAN_OR_EQUAL_TO_8
        [self localNotificationForiOS10:reminderDate];
#endif
    } else {
        [self localNotificationBelowiOS10: reminderDate];
    }
    
}

- (void)registerNotificationSettingsCompletionHandler:(void (^)(BOOL granted, NSError *__nullable error))completionHandler; {
   
    /// 2. request authorization for localNotification
    if([[[UIDevice currentDevice] systemVersion] floatValue] > 10.0f){
#if XCODE_VERSION_GREATER_THAN_OR_EQUAL_TO_8
        UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
        [center requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert)
                              completionHandler:completionHandler];
#endif
    } else if([[[UIDevice currentDevice] systemVersion] floatValue] > 8.0f){
        UIUserNotificationSettings *userNotificationSettings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeAlert | UIUserNotificationTypeSound | UIUserNotificationTypeBadge)
                                                                                                 categories:nil];
        UIApplication *application = [UIApplication sharedApplication];
        [application registerUserNotificationSettings:userNotificationSettings];
    }
}
-(void) localNotificationForiOS10:(NSDate *) _reminderDate{
    
    _eventReminderDate = _reminderDate;
    
    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
    [calendar setTimeZone:[NSTimeZone localTimeZone]];
    
    NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond|NSCalendarUnitTimeZone fromDate:_reminderDate];
    NSLog(@"NSDateComponents %@",components);
    
    
    UNMutableNotificationContent *objNotificationContent = [[UNMutableNotificationContent alloc] init];
    objNotificationContent.title = [NSString localizedUserNotificationStringForKey:_eventname arguments:nil];
    objNotificationContent.body = [NSString localizedUserNotificationStringForKey:@"You have event reminder"
                                                                        arguments:nil];
    objNotificationContent.sound = [UNNotificationSound defaultSound];
    
    /// 4. update application icon badge number
    objNotificationContent.badge = @([[UIApplication sharedApplication] applicationIconBadgeNumber] + 1);
    
    
    UNCalendarNotificationTrigger *trigger = [UNCalendarNotificationTrigger triggerWithDateMatchingComponents:components repeats:NO];
    
    
    UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:@"eventdate"
                                                                          content:objNotificationContent trigger:trigger];
    
    
    /// 3. schedule localNotification
    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    [center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
        if (!error) {
            NSLog(@"Local Notification succeeded");
        }
        else {
            NSLog(@"Local Notification failed");
        }
    }];
}
-(void) localNotificationBelowiOS10:(NSDate *) _reminderDate{
    
    _eventReminderDate = _reminderDate;
    NSLog(@"dateInLocalTimezone %@",_eventReminderDate);
    
    /// 3. schedule localNotification
    UILocalNotification *localNotification = [[UILocalNotification alloc] init];
    localNotification.fireDate = _eventReminderDate ;
    localNotification.alertTitle = _eventname;
    localNotification.alertBody = @"You have Event Name";
    localNotification.timeZone = [NSTimeZone defaultTimeZone];
    localNotification.repeatInterval = 0;
    localNotification.applicationIconBadgeNumber = [[UIApplication sharedApplication] applicationIconBadgeNumber] + 1;
    
    
    NSDictionary *info  =   [NSDictionary dictionaryWithObject:_eventname forKey:_eventname];
    localNotification.userInfo =   info;
    NSLog(@"info ---- %@",info);
    NSLog(@"notification userInfo gets name : %@",[info objectForKey:_eventname]);
  
    
    [[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
}
-(IBAction)deleteReminder:(id)sender{
    
    UIButton *senderButton = (UIButton *)sender;
    _selectedRow = senderButton.tag;
    NSIndexPath *indexPath=[NSIndexPath indexPathForRow:senderButton.tag inSection:0]; // if section is 0
    ReminderCell * cell = (ReminderCell*)[_tableView cellForRowAtIndexPath:indexPath];
    

    _eventname = [[_eventArray objectAtIndex:indexPath.row] objectForKey:@"event_name"];
    _eventdate = [[_eventArray objectAtIndex:indexPath.row] objectForKey:@"event_date"];
    _eventtime = [[_eventArray objectAtIndex:indexPath.row] objectForKey:@"event_st"];
    
    
    
    if([[[UIDevice currentDevice] systemVersion] floatValue] > 10.0f){
        
#if XCODE_VERSION_GREATER_THAN_OR_EQUAL_TO_8
        UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
        

        // remove all local notification:
        [center removePendingNotificationRequestsWithIdentifiers:@[_eventname]];

#endif
    } else {
        
        NSLog(@"Delete notification below ios 10");
        UIApplication *app = [UIApplication sharedApplication];
        NSArray *eventArray = [app scheduledLocalNotifications];
        for (int i=0; i<[eventArray count]; i++)
        {
            UILocalNotification* oneEvent = [eventArray objectAtIndex:i];
            NSDictionary *userInfoCurrent = oneEvent.userInfo;
            NSString *ename=[NSString stringWithFormat:@"%@",[userInfoCurrent valueForKey:_eventname]];
            
            if ([ename isEqualToString:_eventname])
            {
                //Cancelling local notification
                [app cancelLocalNotification:oneEvent];
      
                break;
            }
        }
    }
   
}