1

I'm trying to setup local notification to repeat weekly.
Here's my setup:

UILocalNotification* localNotification =  [[UILocalNotification alloc] init];
...
localNotification.repeatInterval = NSWeekdayCalendarUnit;

In console log:

localNotif: {fire date = Friday, April 24, 2015 at 12:27:33 PM Singapore Standard Time, time zone = Asia/Singapore (GMT+8) offset 28800, repeat interval = NSWeekdayCalendarUnit, repeat count = UILocalNotificationInfiniteRepeatCount, next fire date = Saturday, April 25, 2015 at 12:27:33 PM Singapore Standard Time, user info = { KUserLocalNotficationKey = "2015-04-24 04:27:33 +0000"; }}

As you can see, the next fire date is trigger on the next day. Is this a bug?
I've tested it in iOS 7.1, 8.1, 8.3.

Chirag Shah
  • 3,034
  • 1
  • 30
  • 61
jayr parro
  • 286
  • 3
  • 18

4 Answers4

3

you have to code like this

UILocalNotification* localNotification =  [[UILocalNotification alloc] init];
...
localNotification.repeatInterval = NSCalendarUnitWeekOfYear;

It trigger notification on weekly bases.

Chirag Shah
  • 3,034
  • 1
  • 30
  • 61
2

PLz Try this

  UILocalNotification *localNotif=[[UILocalNotification alloc]init];
        localNotif.fireDate =currentDate;
        localNotif.timeZone=[NSTimeZone defaultTimeZone];
        localNotif.alertBody = @"MazeRoll";
        localNotif.soundName = UILocalNotificationDefaultSoundName;
        localNotif.applicationIconBadgeNumber = 1;
        localNotif.repeatInterval=NSWeekCalendarUnit;
        UIApplication *app=[UIApplication sharedApplication];
        [app scheduleLocalNotification:localNotif];
        NSLog(@"sdfsdfsdf%@",[[UIApplication sharedApplication] scheduledLocalNotifications]);
Vijay yadav
  • 1,220
  • 8
  • 17
0

You can set local notification with NSCalendarUnitWeekOfYear and setting up proper fire date.

UILocalNotification *localNotification=[[UILocalNotification alloc]init];
localNotification.fireDate =[NSDate date]; // set your week day on which repeatedly you want local notfication. for example Monday, then set Fire date of next monday.
localNotification.timeZone=[NSTimeZone defaultTimeZone];
localNotification.repeatInterval=NSCalendarUnitWeekOfYear;
NSLog(@"%@",localNotification);

Hope this helps. Enjoy Coding !!

Viral Savaj
  • 3,379
  • 1
  • 26
  • 39
0
 NSDate *currentDate = [NSDate date];
    NSDate *futureTime = [currentDate dateByAddingTimeInterval:60*60*168];
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSTimeZone *timeZone = [NSTimeZone systemTimeZone];
    [calendar setTimeZone:timeZone];
    NSDateComponents *components = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit fromDate:futureTime];
    if ([components hour] >= 19) { // make it the next day
        [components setDay:[components day] + 1 ];
    }
    [components setHour:8];
    [components setMinute:00];
    NSDate *alertTime = [calendar dateFromComponents:components];
    NSLog(@"alertTime %@",alertTime.description);
    UILocalNotification *localNotif=[[UILocalNotification alloc]init];
    localNotif.fireDate =alertTime;
    localNotif.timeZone=[NSTimeZone defaultTimeZone];
    localNotif.alertBody = @"MazeRoll";
    localNotif.soundName = UILocalNotificationDefaultSoundName;
    localNotif.applicationIconBadgeNumber = 1;
    localNotif.repeatInterval=NSDayCalendarUnit;
    UIApplication *app=[UIApplication sharedApplication];
    [app scheduleLocalNotification:localNotif];
    NSLog(@"sdfsdfsdf%@",[[UIApplication sharedApplication] scheduledLocalNotifications]);
Vijay yadav
  • 1,220
  • 8
  • 17