传递kCFCalendarUnitWeekday的值

时间:2011-04-16 08:25:21

标签: iphone cocoa-touch uilocalnotification nsdatecomponents

我想在某一天设置闹钟。我不明白如何设置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 个答案:

答案 0 :(得分:1)

这里有一些代码可以帮助您找到正确的方向:

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];

您仍然需要查明newDate是否已过去,因此不会触发。


您确实准备好了代码:

// ... 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,这是一个枚举。