4

日、週、月の繰り返し間隔で設定したUILocalNotificationオブジェクトがあります。オブジェクトの発火日にアクセスするのにまったく問題はありません。

[cell.detailTextLabel setText:[notification1.fireDate description]];

しかし、次の発砲日を取得するのに問題があります。上記のnotification1オブジェクトをコンソールに出力すると、次のようになります。

<UIConcreteLocalNotification: 0x613e060>{fire date = 2010-11-29 03:53:52 GMT, time zone = America/Denver (MST) offset -25200, repeat interval = 16, next fire date = 2010-11-30 03:53:52 GMT}

このオブジェクトには、次の発火日を表示するために必要な値またはデータがどこかに含まれています...しかし、それが見つかりません!プログラムでどこで入手できるか誰か知っていますか?

ありがとう

4

4 に答える 4

7

次の発火日はプロパティとして利用できるとは思いませんが、 と から計算されfireDateますrepeatInterval。日付の計算は、タイム ゾーンが異なる場合やその他の厄介な場合に注意が必要です。あなたの例では、毎日の繰り返しを選択し、次の発火日を計算するために、次の行に沿って何かを行うことができます:

NSCalendar *calendar = localNotif.repeatCalendar;
if (!calendar) {
  calendar = [NSCalendar currentCalendar];
}

NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease];
components.day = 1;
NSDate *nextFireDate = [calendar dateByAddingComponents:components toDate:localnotif.fireDate options:0];

他の繰り返し間隔を使用する場合は、それに応じてコードを変更する必要があります。使用する場合は、代わりNSMonthCalendarUnitに使用する必要があります。components.month = 1

于 2010-11-29T10:56:33.150 に答える
0

日付が将来になるまで、repeatIntervalを追加するだけです:

-(NSDate*)nextFireDateForNotification:(UILocalNotification*)notification {
        NSCalendar *calendar = notification.repeatCalendar;
        if (!calendar) {
            calendar = [NSCalendar currentCalendar];
        }

        NSDate* date = [notification.fireDate copy];
        while (date.timeIntervalSinceNow > 0) {
            date = [calendar dateByAddingUnit:notification.repeatInterval value:1 toDate:date options:0];
        }
        return date;
    }
于 2016-11-04T11:13:41.903 に答える