Cancelling a specific UILocalNotification

后端 未结 3 494
青春惊慌失措
青春惊慌失措 2021-02-01 11:18

I have this code for local notification, and I have a scheduleNotification and clearNotification using my own method. These are the codes:

- (void)clearNotificat         


        
相关标签:
3条回答
  • 2021-02-01 11:55
    NSArray *notifications = [[UIApplication sharedApplication] scheduledLocalNotifications];
    for (UILocalNotification *not in notifications) {
        NSString *dateString=[not.userInfo valueForKey:@"EndDate"];
        if([dateString isEqualToString:@"CompareString"])
        { 
            [[UIApplication sharedApplication] cancelLocalNotification:not];
        }
    }
    
    1. Give user info whenever you create local notification (this is a key-value pair).
    2. Iterate through notifications (it contains All Local Notifications) and compare value for the known key. In the above example I am using EndDate as the key and CompareString as the value.

    Its Working Fine With Me.

    Cheers..

    0 讨论(0)
  • 2021-02-01 12:04
    (void)cancelLocalNotification:(NSString*)notificationID
    {
    
       // UILocalNotification *cancelThisNotification = nil;
      //  BOOL hasNotification = NO;
    
        for (int j =0;j<[[[UIApplication sharedApplication]scheduledLocalNotifications]count]; j++)
        {
            UILocalNotification *someNotification = [[[UIApplication sharedApplication]scheduledLocalNotifications]objectAtIndex:j];
            if([[someNotification.userInfo objectForKey:@"drdid"] isEqualToString:notificationID])
            {
                NSLog(@"id,notificationID(App) %@ %@ ",[someNotification.userInfo objectForKey:@"drdid"],notificationID);
                NSLog(@"canceled notifications %@",someNotification);
               [[UIApplication sharedApplication] cancelLocalNotification:someNotification];
            }
    
        }
    }
    
    0 讨论(0)
  • 2021-02-01 12:15

    I would suggest using the userInfo property on UILocalNotification, as others have mentioned. A simpler implementation that the accepted answer would be:

    for(UILocalNotification* notification in [[UIApplication sharedApplication]scheduledLocalNotifications])
    {
           if([[notification.userInfo objectForKey:@"notification_identifier"] isEqualToString:@"notification_001"])
           {
                [[UIApplication sharedApplication] cancelLocalNotification:notification];
           }
    }
    

    A for loop like this is much simpler. I'm not sure if it's more or less optimal, but it's certainly easier to read, and I assume you only have a few notifications to loop through anyway.

    0 讨论(0)
提交回复
热议问题