Отмена определенного UILocalNotification - PullRequest
3 голосов
/ 25 августа 2011

У меня есть этот код для локального уведомления, и у меня есть scheduleNotification и clearNotification, используя мой собственный метод.Это коды:

- (void)clearNotification {
   [[UIApplication sharedApplication] cancelAllLocalNotifications];
}

- (void)scheduleNotification {
   [reminderText resignFirstResponder];
   [[UIApplication sharedApplication] cancelAllLocalNotifications];

   Class cls = NSClassFromString(@"UILocalNotification");
   if (cls != nil) {
      UILocalNotification *notif = [[cls alloc] init];
      notif.fireDate = [[datePicker date] dateByAddingTimeInterval:-30];
      notif.timeZone = [NSTimeZone defaultTimeZone];

      notif.alertBody = @"Evaluation Planner";
      notif.alertAction = @"Details";
      notif.soundName = UILocalNotificationDefaultSoundName;
      notif.applicationIconBadgeNumber = 1;

     NSDictionary *userDict = [NSDictionary dictionaryWithObject:reminderText.text forKey:kRemindMeNotificationDataKey];
     notif.userInfo = userDict;
     [[UIApplication sharedApplication] scheduleLocalNotification:notif];
     [notif release];
    }
}

Эти коды работают хорошо, но теперь я хочу узнать, как узнать, какой объект уведомления будет удален.Я хотел бы создать идентификатор для уведомления, то есть один идентификатор эквивалентен одному уведомлению.Но я не знаю, в какой части я должен это сделать.Плюс мне нужно найти способ включить все это, чтобы быть в списке.

Надеюсь, кто-нибудь может мне помочь.Спасибо.

Ответы [ 3 ]

12 голосов
/ 25 августа 2011
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. Предоставлять информацию о пользователе при каждом создании локального уведомления (это пара ключ-значение).
  2. Итерация по уведомлениям (содержит все локальные уведомления) и сравнение значений для известного ключа.В приведенном выше примере я использую EndDate в качестве ключа и CompareString в качестве значения.

Его отлично работает со мной.

Cheers ..

2 голосов
/ 24 июня 2013
(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 голосов
/ 01 мая 2014

Я бы предложил использовать свойство userInfo в UILocalNotification, как уже упоминали другие.Более простая реализация, чем принятый ответ:

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

A для цикла, подобного этому, намного проще.Я не уверен, является ли он более или менее оптимальным, но его, безусловно, легче читать, и я полагаю, что у вас есть всего несколько уведомлений, чтобы пройти через них в любом случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...