Как создать несколько локальных уведомлений

Я пытаюсь создать несколько локальных уведомлений в своем приложении, но по какой-то причине всплывает только первое уведомление, остальные просто не работают, это мой код.

У меня есть класс с именем criaAlertas, который отвечает за создание уведомлений, в этом классе у меня есть следующий метод:

-(void)setarNotificacao:(NSInteger)quando nome:(UILocalNotification *)notification 
{
    UIApplication *myapp = [UIApplication sharedApplication];

    notification.fireDate = [NSDate dateWithTimeIntervalSinceNow:quando];
    notification.alertBody = @"Nice";
    notification.timeZone = [NSTimeZone defaultTimeZone];
    notification.soundName = UILocalNotificationDefaultSoundName;

    NSMutableArray *arrayOfNOtifications = [[NSMutableArray alloc]init];

    [arrayOfNOtifications addObject:notification];
    myapp.scheduledLocalNotifications = arrayOfNOtifications;
}

Итак, я создал экземпляр объекта этого класса и попытался сделать это:

    criaAlertas *novoAlerta = [[criaAlertas alloc]init];
    UILocalNotification *notaUm = [[UILocalNotification alloc]init];
    UILocalNotification *notaDois = [[UILocalNotification alloc]init];
    [novoAlerta setarNotificacao:15 nome:notaUm];
    [novoAlerta setarNotificacao:30 nome:notaDois];

Что я делаю неправильно?


person André Oliveira    schedule 31.10.2013    source источник


Ответы (2)


Проблема в том, что вы перезаписываете все локальные уведомления, запланированные в настоящее время, вызовом вашей функции -setarNotificacao:nome:. Эта линия

    myapp.scheduledLocalNotifications = arrayOfNOtifications;

устанавливает для всех текущих запланированных уведомлений значение arrayOfNotifications; если уведомление, запланированное в настоящее время, отсутствует в этом массиве, оно отменяется.

Исправление заключается в использовании -[UIApplication scheduleLocalNotification:] для планирования уведомления, который добавляет данное уведомление без отмены каких-либо уже запланированных уведомлений:

[myapp scheduleLocalNotification:notification];
person Adam Rosenfield    schedule 31.10.2013
comment
Спасибо, это была именно проблема! - person André Oliveira; 31.10.2013
comment
@ Адам Розенфилд, не могли бы вы добавить полный код для создания и удаления нескольких уведомлений? - person Vasanth; 21.01.2019

Попробуй это:

  -(IBAction)setRemind:(id)sender
   {
      NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar];

       NSDateFormatter *dateFormatter2 = [[NSDateFormatter alloc] init];
       dateFormatter2 setDateFormat:@"YYYY-MM-dd HH:mm:ss"];
       //Gets our picker
       NSDate *selectedTime = [datePicker date];
       strDate2 = [dateFormatter2 stringFromDate:selectedTime];


      NSDate *Date=[dateFormatter2 dateFromString:strDate2];
      NSLog(@"selected Date fro str Over Here =======>>>>>>>>>>>>%@",Date);

     NSDateComponents *dateComponents = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit ) fromDate:Date];

     // Set up the fire time
     NSDateComponents *dateComp = [[NSDateComponents alloc] init];
    [dateComp setDay:[dateComponents day]];
    [dateComp setMonth:[dateComponents month]];
    [dateComp setYear:[dateComponents year]];
    [dateComp release];

     NSDate *date = [calendar dateFromComponents:dateComp];
    [self scheduleAlarmForDate:date message:@"My First Local Notification."];
  }


   - (IBAction)scheduleAlarmForDate:(NSDate*)date message:(NSString*)msg
     {

         //====== TO SEE OLD NOTIFI=======
         UIApplication *Ap = [UIApplication sharedApplication];
         NSArray *arr = [Ap scheduledLocalNotifications];
         NSLog(@"Old Notifications :>> %@",arr);

       UIApplication* app = [UIApplication sharedApplication];
       UILocalNotification *alarm = [[UILocalNotification alloc] init];

     // Create a new notification
     alarm.fireDate = date;
     NSLog(@"fireDate IS >> %@", alarm.fireDate);
     alarm.timeZone = [NSTimeZone localTimeZone];
     alarm.alertBody = msg;
     NSLog(@"msg IS >> %@",msg);
     alarm.alertAction = @"Show";
     alarm.repeatInterval = NSDayCalendarUnit * 24 * 60 // it repeat every day ,set it as per you want 

     alarm.soundName = UILocalNotificationDefaultSoundName;
     alarm.applicationIconBadgeNumber = 1;
     [app scheduleLocalNotification:alarm];
     [alarm release];
  } 

Надеюсь, это поможет.

Удачного кодирования...

person Dhaval Bhadania    schedule 31.10.2013
comment
а как же айос 10? если я хочу запустить локальное уведомление для более чем 1 уведомления? - person Anil Gupta; 28.12.2016
comment
что ты хочешь именно?? @АнилГупта - person Dhaval Bhadania; 28.12.2016
comment
Я хочу добавить локальное уведомление в iOS 10 и установить 3 будущих даты для напоминания о событии. - person Anil Gupta; 28.12.2016
comment
вы можете установить так ... может это поможет вам лучше: appcoda.com/ios10 -user-notifications-guide - person Dhaval Bhadania; 28.12.2016