0

この時間をハードコーディングして、毎時間の先頭にローカル通知を送信できるようにしましたが、何か問題があります。しかし、それが私がテストしている方法なのか、Xcodeの動作なのか、それともコード自体なのかはわかりません。とにかく、これが私が作成したコードです。それを見て、そのようなものをコーディングするためのより簡単な、またはより良い方法に私を導いてください。ありがとうございました。

NSCalendar *calendar1 = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar1 components:(NSHourCalendarUnit |NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:[NSDate date]];
hour = [components hour];
min =[components minute];
sec =[components second];
NSLog(@"hour is %i",hour);

NSLog(@"min is %i",min);

NSLog(@"sec is %i",sec);
if (hour < 24) {
 hour=hour+1;
 } else {
     hour=0;

その後..

[[UIApplication sharedApplication] cancelAllLocalNotifications];
NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar] ;
NSDateComponents *componentsForReferenceDate = [[NSDateComponents alloc] init];
[componentsForReferenceDate setHour:hour];
[componentsForReferenceDate setMinute:0];
[componentsForReferenceDate setSecond:0];

 NSDate *fireDateOfNotification = [calendar dateFromComponents: componentsForReferenceDate];

// Create the notification
4

2 に答える 2

3

ここに参加することがいくつかあります:

  • 日付を尋ねるとき、とにかくそれらをスクラップするので、分と秒を尋ねる必要はありません。
  • おそらくtimeZoneを設定する必要があります
  • 時間が23の場合、1を追加します。これにより、24が正しくなくなります。
  • 新しいオブジェクトを作成する必要はありませんNSDateComponents。所有しているオブジェクトを構成するだけです。

    NSCalendar *calendar = [NSCalendar currentCalendar];
    calendar.timeZone = [NSTimeZone timeZoneWithName:@"GMT"];
    
    NSDateComponents *components = [calendar components:NSHourCalendarUnit fromDate:[NSDate date]];
    components.hour   = (components.hour + 1) % 24;
    components.minute = 0;
    components.second = 0;
    
    NSDate *fireDate = [calendar dateFromComponents:components];
    NSLog(@"%@", fireDate);
    

時間を設定するために使用すると%、23を超えることができなくなります

于 2013-01-12T01:15:43.817 に答える
2

通知の作成方法は示していませんが、1時間ごとに繰り返すのに最適な方法は、NSHourCalendarUnit繰り返し間隔を使用することです。

タイプのローカル通知オブジェクトにはUILocalNotification、通知の配信の繰り返し間隔を決定するrepeatIntervalという名前のプロパティがあります。

notification.repeatInterval = NSHourCalendarUnit;

通知は指定した時間に基づいて1時間ごとに繰り返されるため、ですべてを正しく設定しているのでNSDate、repeatIntervalを設定するだけでよいと思います。

于 2013-01-12T00:09:22.683 に答える