2015-03-02 10 views
0

Я создаю приложение, которое позволяет пользователю получать локальное уведомление, чтобы повторять каждый будний день, потому что у яблока нет интервала повторения для WeekDays Мне нужно было создать локальное уведомление для каждого дня недели , Я сделал цикл за цикл в 5 раз больше количества дней на рабочей неделе. Однако, похоже, он не стреляет. Но когда мне удастся удалить уведомления, я вижу все пять, просто не горит. Вот как выглядит мой код.Будни Местное уведомление Not Firing

NSDate *today = [NSDate date]; 
UILocalNotification* localNotification = [[UILocalNotification alloc] init]; 
localNotification.fireDate = _alarmTime; 
localNotification.alertBody = @"Wake up or pay-up!"; 
localNotification.timeZone = [NSTimeZone systemTimeZone]; 
localNotification.alertAction = @"Wake up or pay-up!"; 
localNotification.soundName = @"sound_ring.caf"; 

NSCalendar *gregCalendar = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *dateComponent = [gregCalendar components:NSYearCalendarUnit | NSWeekCalendarUnit fromDate:_alarmTime]; 

switch (_repeatInt) { 
    case 1: 
     localNotification.repeatInterval = NSCalendarUnitDay; 
     [[UIApplication sharedApplication] scheduleLocalNotification:localNotification]; 
     _repeatString = @"Everyday"; 
     break; 

    case 2: 
     //Attempting to create 5 local notifications with different days but same time. 
     for (int i = 2; i <= 6; i++){ 

      [dateComponent setWeekday:i]; // 2 = mon // 3= tues // 4 = wends // 5 = thurs // 6 = fri 
      NSDate *fireDate = [gregCalendar dateFromComponents:dateComponent]; 

      UILocalNotification *localNotification2 = [localNotification copy]; 
      localNotification2.fireDate = fireDate; 
      localNotification2.repeatInterval = NSWeekCalendarUnit; 
      [[UIApplication sharedApplication] scheduleLocalNotification:localNotification2]; 
      NSLog(@"%D",i); 

     } 

Если у кого есть идеи, пожалуйста, дайте мне знать! Заранее спасибо.

Update:

NSDate *startDate = [gregCalendar dateFromComponents:dateComponent]; 
      [dateComponent setMonth:0]; 
      [dateComponent setDay:i]; // 2 = mon // 3= tues // 4 = wends // 5 = thurs // 6 = fri 
      [dateComponent setYear:0]; 

      NSDate *fireDate = [gregCalendar dateByAddingComponents:dateComponent toDate:startDate options:0]; 

      UILocalNotification *localNotification2 = [localNotification copy]; 
      localNotification2.fireDate = fireDate; 
      localNotification2.repeatInterval = NSCalendarUnitWeekOfYear; 
      [[UIApplication sharedApplication] scheduleLocalNotification:localNotification2]; 
      NSLog(@"%D",i); 
+0

но ... у вас есть в AppDelegate ... код для регистрации для отправки уведомлений? – TonyMkenu

+0

@TonyMkenu Да, у меня это уже есть. – Jack

+0

@jack Где указано «_repeatInt» в вашем коде. Пожалуйста, дайте мне знать, что вам нужно. – annu

ответ

2

Хорошо я, наконец смог получить местные уведомления повторить каждый будний день, я добавил [setHour] и [setMinute], а также изменил int в цикле for к NSUInteger. Вот мой код ниже.

NSCalendar *gregCalendar = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *dateComponent = [gregCalendar components:NSYearCalendarUnit | NSWeekCalendarUnit fromDate:_alarmTime]; 

switch (_repeatInt) { 
    case 1: 
     localNotification.repeatInterval = NSCalendarUnitDay; 
     [[UIApplication sharedApplication] scheduleLocalNotification:localNotification]; 
     _repeatString = @"Everyday"; 
     break; 

    case 2: 

     for (NSUInteger i = 2; i <= 6; i++) { 

      NSDateComponents *components = [gregCalendar components:(NSCalendarUnitHour | NSCalendarUnitMinute) fromDate:_alarmTime]; 
      NSInteger hour = [components hour]; 
      NSInteger minute = [components minute]; 

      [dateComponent setMinute:minute]; 
      [dateComponent setWeekday:i]; // 2 = mon // 3= tues // 4 = wends // 5 = thurs // 6 = fri 
      [dateComponent setHour:hour]; 

      NSDate *fireDate = [gregCalendar dateFromComponents:dateComponent]; 

      UILocalNotification *localNotification2 = [[UILocalNotification alloc] init]; 
      localNotification2.fireDate = fireDate; 
      localNotification2.alertBody = @"Wake up or pay-up!"; 
      localNotification2.timeZone = [NSTimeZone systemTimeZone]; 
      localNotification2.alertAction = @"Wake up or pay-up!"; 
      localNotification2.soundName = @"sound_ring.caf"; 
      localNotification2.repeatInterval = NSCalendarUnitWeekOfYear; 
      [[UIApplication sharedApplication] scheduleLocalNotification:localNotification2]; 
      NSLog(@"%lu",(unsigned long)i); 

     } 
0

Они не срабатывают, потому что дата вы даете им неверен.

Вот как я сгенерировал дату Й количества дней в будущем:

 NSCalendar *calendar = [NSCalendar currentCalendar]; 
     NSDateComponents *components = [calendar components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:[NSDate date]]; 
     NSDate *startDate = [calendar dateFromComponents:components]; 
     [components setMonth:0]; 
     [components setDay:X]; 
     [components setYear:0]; 
     NSDate *endDate = [calendar dateByAddingComponents:components toDate:startDate options:0];