2013-11-21 25 views
9

毎週日曜日の午後8時にUILocalNotificationをトリガーしたいと思いますが、毎日午後8時に火事が発生しています。毎週特定の日時に通知する

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSDate *now = [NSDate date]; 
    NSDateComponents *componentsForFireDate = [calendar components:(NSYearCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit| NSSecondCalendarUnit | NSWeekdayCalendarUnit) fromDate: now]; 
    [componentsForFireDate setWeekday: 1] ; //for fixing Sunday 
    [componentsForFireDate setHour: 20] ; //for fixing 8PM hour 
    [componentsForFireDate setMinute:0] ; 
    [componentsForFireDate setSecond:0] ; 

    NSDate *fireDateOfNotification = [calendar dateFromComponents: componentsForFireDate]; 
    UILocalNotification *notification = [[UILocalNotification alloc] init] ; 
    notification.fireDate = fireDateOfNotification ; 
    notification.timeZone = [NSTimeZone localTimeZone] ; 
    notification.alertBody = [NSString stringWithFormat: @"New updates!"] ; 
    notification.userInfo= [NSDictionary dictionaryWithObject:[NSString stringWithFormat:@"New updates added for that week!"] forKey:@"new"]; 
    notification.repeatInterval= NSDayCalendarUnit ; 
    notification.soundName=UILocalNotificationDefaultSoundName; 

    NSLog(@"notification: %@",notification);//it indicates that the notif will be triggered today at 8PM and not Sunday. 

    [[UIApplication sharedApplication] scheduleLocalNotification:notification] ; 

ありがとうございます。

+0

この通知を試してください.repeatInterval = NSWeekCalendarUnit; – chancyWu

+0

@Chany:次週(次の火曜日)にジャンプしますが、日曜日はジャンプしません。 NSWeekCalendarUnit'には次のものがあります: 'next fire date = 2013年11月26日(火曜日)午後8:00:00' – androniennn

答えて

12

init関数でNSWeekCalendarUnitが見つかりませんでした。それにNSWeekCalendarUnitを追加し、NSWeekCalendarUnitrepeatIntervalを設定し、出力は

next fire date = Sunday, November 24, 2013 at 8:00:00 PM 

コードであるここにある:

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDate *now = [NSDate date]; 
NSDateComponents *componentsForFireDate = [calendar components:(NSYearCalendarUnit | NSWeekCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit| NSSecondCalendarUnit | NSWeekdayCalendarUnit) fromDate: now]; 
[componentsForFireDate setWeekday: 1] ; //for fixing Sunday 
[componentsForFireDate setHour: 20] ; //for fixing 8PM hour 
[componentsForFireDate setMinute:0] ; 
[componentsForFireDate setSecond:0] ; 

    //... 
    notification.repeatInterval = NSWeekCalendarUnit; 
    //... 
+0

ありがとう、ありがとうございました。私はあなたなしでそれについては決して考えません。ありがとうございました! – androniennn

+0

こんにちは、私は週にもう一日追加する必要があります。毎週月曜日と火曜日を設定する必要がある場合は、現地の通知を受けてください。私は何をすべきか?前もってありがとう – TamilKing

4

私もそれについて検索しました。以下のコードは私のためにうまくいく。 1日の値を7日曜日から土曜日に渡し、あなたが発射したいと思う行動をした通知体に日付を指定すると、その特定の日に通知が来ます。 日付を設定すると、時刻が自動的に設定されます。

ご希望の場合はこちらをご覧ください。

-(void) weekEndNotificationOnWeekday: (int)weekday :(UILocalNotification *)notification : (NSDate*) alramDate 
{ 
    NSCalendar *calendar = [NSCalendar currentCalendar]; 

    NSDateComponents *componentsForFireDate = [calendar components:(NSYearCalendarUnit | NSWeekCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit| NSSecondCalendarUnit | NSWeekdayCalendarUnit) fromDate: alramDate]; 
    [componentsForFireDate setWeekday: weekday] ; //for fixing Sunday 
// [componentsForFireDate setHour: 20] ; //for fixing 8PM hour 
// [componentsForFireDate setMinute:0] ; 
// [componentsForFireDate setSecond:0] ; 
    notification.repeatInterval = NSWeekCalendarUnit; 
    notification.fireDate=[calendar dateFromComponents:componentsForFireDate]; 
    [[UIApplication sharedApplication] scheduleLocalNotification:notification]; 
} 
+0

[componentsForFireDate setDate:-1]を与えるとどうなりますか?マイナス1? – kiran

関連する問題