我已经设置了本地通知,我的问题是我已经将它设置为星期六并且重复间隔一周。但是,我设置了正确的日期,但我仍然在每个星期天得到它,但在正确设定的时间。有人看到我的错误吗?哦,不要忘记,如果我设置了正确的一天,如果它......周三我会在一分钟后立即得到一个通知。不知道我的错在哪里。
- (void)applicationDidEnterBackground:(UIApplication *)applicatio
{
[[UIApplication sharedApplication] cancelAllLocalNotifications];
NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar] ;
NSDateComponents *componentsForReferenceDate =
[calendar components:(NSDayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit ) fromDate:[NSDate date]];
//set day (saturday)
[componentsForReferenceDate setDay:1] ;
[componentsForReferenceDate setMonth:12] ;
[componentsForReferenceDate setYear:2012] ;
NSDate *referenceDate = [calendar dateFromComponents:componentsForReferenceDate] ;
// set components for time 18:30.
NSDateComponents *componentsForFireDate =
[calendar components:(NSYearCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit| NSSecondCalendarUnit ) fromDate: referenceDate];
[componentsForFireDate setHour: 18] ;
[componentsForFireDate setMinute:38] ;
[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: @"You are missed!"] ;
notification.alertAction = @"Back";
notification.userInfo= [NSDictionary dictionaryWithObject:[NSString stringWithFormat:@"Some information"] forKey:@"information"];
notification.repeatInterval= NSWeekCalendarUnit ;
notification.soundName = @"Appnotifisound.wav";
notification.applicationIconBadgeNumber = 1;
[[UIApplication sharedApplication] scheduleLocalNotification:notification] ;
感谢。
答案 0 :(得分:0)
这是因为您正在创建两个不同的NSDateComponents
。一个用于设置日期,月份和年份,另一个用于设置小时,分钟和秒。
这应该有效:
- (void)applicationDidEnterBackground:(UIApplication *)application {
[[UIApplication sharedApplication] cancelAllLocalNotifications];
NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar] ;
NSDateComponents *componentsForReferenceDate = [[NSDateComponents alloc] init];
//set day (saturday)
[componentsForReferenceDate setDay:7] ;
[componentsForReferenceDate setMonth:12] ;
[componentsForReferenceDate setYear:2012] ;
// set time (08:30 PM)
[componentsForReferenceDate setHour: 20] ;
[componentsForReferenceDate setMinute:30] ;
[componentsForReferenceDate setSecond:00] ;
NSDate *fireDateOfNotification = [calendar dateFromComponents: componentsForReferenceDate];
// Create the notification
UILocalNotification *notification = [[UILocalNotification alloc] init] ;
notification.fireDate = fireDateOfNotification ;
notification.timeZone = [NSTimeZone localTimeZone] ;
notification.alertBody = [NSString stringWithFormat: @"You are missed!"] ;
notification.alertAction = @"Back";
notification.userInfo= [NSDictionary dictionaryWithObject:[NSString stringWithFormat:@"Some information"] forKey:@"information"];
notification.repeatInterval= NSWeekCalendarUnit ;
notification.soundName = @"Appnotifisound.wav";
notification.applicationIconBadgeNumber = 1;
[[UIApplication sharedApplication] scheduleLocalNotification:notification] ;
}