3

我尝试每周六重复 UILocalNotification 但我没有成功。我尝试以下方法:

// Create notification for every saturday at 12:00 am
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [gregorian components:NSUIntegerMax fromDate:[NSDate date]];
[components setWeekday:7]; // Saturday
[components setHour:12]; // 12 am
[components setMinute:0];
[components setSecond:0];

NSDate *fireDate = [gregorian dateFromComponents:components];         
NSLog(@"%@", fireDate);

[[NotificationsManager sharedManager] configureLocalAlertMessage:message
                                                                    fireDate:fireDate
                                                          repeatIntervalUnit:NSWeekCalendarUnit
                                                                        type:kNotificationTypeMoneyBox];

但是“fireDate”返回:“2013-03-12 11:00:00 +0000”,即今天。

有什么帮助吗?谢谢!

编辑:

配置通知的代码

- (void)configureLocalAlertMessage:(NSString *)message fireDate:(NSDate *)date repeatIntervalUnit:(NSCalendarUnit)repeat type:(NotificationType)type {

    // Local notification
    UILocalNotification *notification = [[UILocalNotification alloc] init];
    notification.timeZone = [NSTimeZone systemTimeZone];
    notification.fireDate = date;
    notification.repeatInterval = repeat;
    notification.soundName = UILocalNotificationDefaultSoundName;
    notification.hasAction = YES;
    notification.alertBody = message;
    notification.userInfo = @{kNotificationTypeKey : @(type)};
    notification.applicationIconBadgeNumber = [[UIApplication sharedApplication] applicationIconBadgeNumber] + 1;

    // Schedule
    [[UIApplication sharedApplication] scheduleLocalNotification:notification];

}
4

1 回答 1

1
    NSCalendar *gregorian = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *weekdayComponents =[gregorian components:(NSDayCalendarUnit |               NSWeekdayCalendarUnit | NSWeekCalendarUnit | NSYearCalendarUnit) fromDate:idate];

    int weekday = [weekdayComponents weekday];
    NSDate *nextdate ;
    NSDateComponents *offsetComponents = [[NSDateComponents alloc] init];
    if(weekday <= 5)
    {
       /* it is my case to check the weekday, if it is less or greater than 5*/
    }
    else
    {
        [offsetComponents setDay:7];
        [offsetComponents setHour:12];
        [offsetComponents setMinute:0];
        [offsetComponents setSecond:0];
        nextdate = [gregorian dateByAddingComponents:offsetComponents toDate:idate options:0];
    }
    [offsetComponents release];
    [gregorian release];

您可以将此下一个日期用作本地通知的触发日期。这里idate是 NSDate *idate = [NSDate date];

于 2013-07-13T06:48:09.930 回答