Передайте значение kCFCalendarUnitWeekday - PullRequest
0 голосов
/ 16 апреля 2011

Я хочу установить будильник в определенный день.Я не понимаю, как установить значение kCFCalendarUnitWeekday.Вот мой код:

NSDateComponents *components = [[NSDateComponents alloc] init];
UILocalNotification *localNotif = [[UILocalNotification alloc] init];
if (localNotif == nil)
    return;
localNotif.fireDate = selected;
localNotif.timeZone = [NSTimeZone defaultTimeZone];
localNotif.repeatCalendar = [NSCalendar currentCalendar];

if (isSun) {
    [components setWeekday:1];

    [localNotif setRepeatInterval:(NSInteger)components];
}

if (isMon) {
    [components setWeekday:2];
    [localNotif  setRepeatInterval:(NSInteger)components];  
}

Спасибо.

1 Ответ

1 голос
/ 16 апреля 2011

Хорошо, вот код, который поможет вам в правильном направлении:

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [gregorian components:NSWeekdayCalendarUnit|NSYearCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit fromDate:[NSDate date]];

    // this will set the weekday to sunday
[components setWeekday:1];
    // this is a new date on sunday
NSDate * newDate = [gregorian dateFromComponents:components];

Вам все еще нужно выяснить, была ли новая дата в прошлом, чтобы она не сработала.


На самом деле ваш код готов:

// ... init code ...

// *** this the important date ***
localNotif.fireDate = dateOnASunday;
localNotif.timeZone = [NSTimeZone defaultTimeZone];
localNotif.repeatCalendar = NSWeekCalendarUnit;

... // add body etc. ...

[[UIApplication sharedApplication] scheduleLocalNotification:localNotif];
[localNotif release];

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

Вы устанавливаете интервал повторения следующим образом:

// repeats notification on a weekly basis
localNotif.repeatCalendar = NSWeekCalendarUnit;

Свойство repeatCalender имеет тип NSCalendarUnit , который является перечислением.

...