как получить UILocalNotification повторить в определенные дни - PullRequest
0 голосов
/ 30 января 2012

Я создаю приложение будильника, которое запускает локальное уведомление в определенный день, выбранный пользователем, т. Е. Если пользователь выбрал M, F, Sat, тогда оно должно срабатывать только каждые M / F / Sat. Проблема в том, что моя кровавая тревога срабатывает каждый день в это время. Как я могу ограничить это выбранными пользователем днями? Вот мой код

//For testing purposes I want the alarm to fire only on Monday at 7:00am.
//This fires every day at 7:00am
[[UIApplication sharedApplication] cancelAllLocalNotifications];

 NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

NSDate *now = [NSDate date];    

    // set components for time 7:00 a.m. Monday
    NSDateComponents *componentsForFireDate = [calendar components:(NSYearCalendarUnit |   NSHourCalendarUnit | NSMinuteCalendarUnit| NSSecondCalendarUnit | NSWeekdayCalendarUnit) fromDate: now];

    [componentsForFireDate setWeekday: 2] ;
    [componentsForFireDate setHour: 7] ;
    [componentsForFireDate setMinute:0] ;
    [componentsForFireDate setSecond:0] ;

    NSDate *fireDateOfNotification = [calendar dateFromComponents: componentsForFireDate];

    // Create the notification
    UILocalNotification *notification = [[UILocalNotification alloc]  init] ;

    notification.fireDate = fireDateOfNotification ;
    notification.timeZone = [NSTimeZone localTimeZone] ;
    notification.alertBody = [NSString stringWithFormat: @"Wake up!"] ;
    notification.userInfo= [NSDictionary dictionaryWithObject:[NSString stringWithFormat:@"Waking Up time"] forKey:@"wakeUp"];

//Problem is here NSDayCalendarUnit makes my alarm fire every day
    notification.repeatInterval= NSDayCalendarUnit ;

    //notification.soundName=UILocalNotificationDefaultSoundName;
    notification.soundName=@"alarm-clock-ringing-01.wav";

    [[UIApplication sharedApplication] scheduleLocalNotification:notification] ;

Ответы [ 2 ]

1 голос
/ 30 января 2012

Будет ли это работать, если вы фактически активируете локальное уведомление только один раз, но когда ваше устройство получает уведомление, заставьте его опубликовать то же самое уведомление снова. Ваше приложение не должно быть запущено, чтобы это работало.

Вы обрабатываете локальное уведомление, когда ваше приложение не запущено, в applicationDidFinishLaunching вашего приложения:

UILocalNotification *localNotif = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];

// handles notification when application is relaunched after being terminated
// not when app is already in the foreground running.
if(localNotif)
{   
    // repeat the same local notification again
    [[UIApplication sharedApplication] scheduleLocalNotification:localNotif];
}

Примечание: repeatInterval будет выполнять то же действие с указанным вами модулем (в данном случае «день» будет повторяться каждый день независимо от того, что вы указали в качестве даты уведомления)

0 голосов
/ 30 января 2012

Вы можете сделать три тревоги: одну для ближайшего понедельника, ближайшей среды и ближайшей пятницы и установить notification.repeatInterval = NSWeekCalendarUnit для каждой из них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...