0

UILocalNotificationを使用して、タイムゾーンをデフォルト以外のタイムゾーンに設定しようとしています。

目的は次のようなことです。-ユーザーは時間とタイムゾーンでアラートをスケジュールします-そのタイムゾーンが指定された時間になったときにアラートを表示します。

もっと口頭で説明すると、私がロサンゼルスに住んでいて、私のガールフレンドがシカゴにいるとしましょう。シカゴが平日の午前7時にアラートを設定したいと思います。

1つのアラートについては、絶対時間を実行するために、タイムゾーンなしで実行できます。しかし、ユーザーが繰り返しフラグを設定できるようにしたいのですが、その場合はできないようです-上記の例のようにlocalnotificationのtimezoneプロパティをchicagoに設定しようとしましたが、ローカル通知は起動しません。

シリアル化プロセス中にuinocalnotificationをログに記録しましたが、次の1つの出力があります。

"<UIConcreteLocalNotification: 0xfb25a50>{fire date = 2011-02-06 06:02:00 -0800, time zone = America/Chicago (CST) offset -21600, repeat interval = 16, next fire date = 2011-02-06 08:02:00 -0800}"

シカゴの絶対時間の午前9:02に発火日を設定し、タイムゾーンをcstに設定しました。ログには、発火日が実際に私の現地時間の06:02であることが記載されています。ただし、何も起こりません。また、次の発火日は+2時間ではなく、+ 1日である必要があるため、奇妙です。

これを設定する方法は次のとおりです。ClassclassUILocalNotification=NSClassFromString(@ "UILocalNotification");

if (classUILocalNotification != nil) {
    id note = [[classUILocalNotification alloc] init];

    NSString *body = @"body message";       
    switch (repeatflag) {
        case 1: [note setRepeatInterval:NSDayCalendarUnit]; break;
        case 2: [note setRepeatInterval:NSWeekdayCalendarUnit]; break;
        case 3: [note setRepeatInterval:NSWeekCalendarUnit]; break;
        case 4: [note setRepeatInterval:NSMonthCalendarUnit]; break;
        case 5: [note setRepeatInterval:NSYearCalendarUnit]; break; 
        default: break;
    }
    [note setFireDate:dt];
    [note setAlertBody:body];
    [note setTimeZone:timezone];                
    [note setHasAction:NO];
}

これは未知の動作のようです。誰かが私がやろうとしていることを達成するためのより良い方法を持っていますか?ありがとう!

4

1 に答える 1

0

非ローカル タイムゾーンを使用すると、UILocalNotification にバグがあるようです。最初に起動されたイベントは、正しい日時とタイムゾーンで起動されます。ただし、後続のイベントは、setTimeZone メソッドで設定されたタイムゾーンではなく、ローカル タイムゾーンで特定の日時に対して発生します。【iOS6.1】

于 2013-04-27T23:55:22.927 に答える