views:

300

answers:

2

I want to test add local notification. I want it repeat daily/hourly. How can I do that?

NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar];

// Get the current date NSDate *now = [NSDate date];

// Break the date up into components NSDateComponents *dateComponents = [calendar components:( NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit ) fromDate:now];

NSDateComponents *timeComponents = [calendar components:( NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit)
           fromDate:now];

// Set up the fire time NSDateComponents *dateComps = [[NSDateComponents alloc] init];

[dateComps setDay:[dateComponents day]];
[dateComps setMonth:[dateComponents month]];
[dateComps setYear:[dateComponents year]];

[dateComps setHour:[timeComponents hour]];

[dateComps setMinute:[timeComponents minute]]; [dateComps setSecond:[timeComponents second]+10];

// Notification will fire in one minute

NSDate *itemDate = [calendar dateFromComponents:dateComps];
[dateComps release];

UILocalNotification *localNotif = [[UILocalNotification alloc] init];
if (localNotif == nil)
    return;

localNotif.fireDate = itemDate;
localNotif.timeZone = [NSTimeZone defaultTimeZone];

// Notification details localNotif.alertBody = @"Hello World";

// Set the action button localNotif.alertAction = @"View"; localNotif.soundName = UILocalNotificationDefaultSoundName;

applicationIconBadgeNumber++;

localNotif.applicationIconBadgeNumber = applicationIconBadgeNumber;

// Schedule the notification [[UIApplication sharedApplication] scheduleLocalNotification:localNotif]; [localNotif release];

A: 

Your code would be much simpler if you used dateByAddingComponents:toDate:options:.

(dateByAddingTimeInterval: does not handle calendars properly, e.g. time zone changes.)

If you want it to repeat, I think you have to add several, or re-add them when your app is next launched. Otherwise, a notification that repeated every second would be incredibly annoying.

tc.
+1  A: 

Check out this tutorial: http://useyourloaf.com/blog/2010/9/13/repeating-an-ios-local-notification.html

jodm