iOS Daily Local Push Notifications

梦想与她 提交于 2019-11-29 07:33:48

You need to find the NEXT time that 9am occurs, and set the local notification to fire at that time:

NSDate *now = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:now];
[components setHour:9];
// Gives us today's date but at 9am
NSDate *next9am = [calendar dateFromComponents:components];
if ([next9am timeIntervalSinceNow] < 0) {
    // If today's 9am already occurred, add 24hours to get to tomorrow's
    next9am = [next9am dateByAddingTimeInterval:60*60*24];
}

UILocalNotification *notification = [[UILocalNotification alloc] init];
notification.fireDate = next9am;
notification.alertBody = @"It's been 24 hours.";
// Set a repeat interval to daily
notification.repeatInterval = NSDayCalendarUnit;
[[UIApplication sharedApplication] scheduleLocalNotification:notification];

Your question has two problems:

  1. Obtain the right NSDate for the next fire date.
  2. Setup the local notification in order to fire every 24 hours

Here is a snippet:

// 1st: find next fire date, using NSDateComponents

NSDate * date = [NSDate date];
NSDateComponents * components = [[NSCalendar currentCalendar] components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit fromDate:date];

// Components will now contain information about current hour and minute, day, month and year.

// Do your calculation in order to setup the right date. Note that components reflect user timezone.
// For example, skip to the next day if current time is after 9:00:
if (components.hour >= 9) {
    components.day += 1;
}

// Now fix the components for firing time, for example 9:00.
components.hour = 9;
components.minute = 0;

NSDate * fireDate = [[NSCalendar currentCalendar] dateFromComponents:components];

NSLog(@"Notification will fire at: %@", fireDate);


// 2nd: Schedule local notification with repetitions:

UILocalNotification * notification = [[UILocalNotification alloc] init];
notification.fireDate = fireDate;
notification.repeatInterval = NSDayCalendarUnit; // Here is the trick

notification.alertBody = @"It's been 24 hours.";
[[UIApplication sharedApplication] scheduleLocalNotification:notification];

Just set the repeatInterval before scheduling the notification

localNotification.repeatInterval = NSCalendarUnitDay;
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!