3

スケジュールされた時間にアラーム音を鳴らすアプリケーションがあります。これは、毎日同時に鳴る繰り返しアラームとして設定されています。例:毎日午前6時に起きます。

DST 移行後に初めて問題に気付きました。たとえば、12 月に作成したアラームを毎朝 6 時に鳴らします。行進後、アラームが 1 時間早く鳴り始めました (または、後であった可能性があります。思い出せません)。しかし、問題をデバッグしようとしても、問題が発生することはありませんでした。座って実際に掘り下げるまでに、問題を再現することはできませんでした。

最近、寝るときはスマホを機内モードにしてます。これにより、問題がより頻繁に再現されるようです。しかし、すべてがうまくいく時があります。しかし、機内モードにしてからアラーム時刻を確認すると、作成した時刻より 1 時間遅れているように見えます。NSDate は、午前 6 時ではなく午前 7 時にアラーム テーブルに表示されます。しかし、時々午前6時に表示されます。だから私はアラームをオンにします。しかし、翌朝7時に目覚ましが鳴る。

DST と、NSDate オブジェクトの DST にあるかどうかを電話が認識していないことに関係していると思います。しかし、私の電話に表示される実際の時間は決して間違っていません。しかし、私のアラームは間違った時間に鳴ります。

ここに私のコードのサンプルがあります:デバッガーに接続されているため、失敗したことはありません。

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setTimeStyle:NSDateFormatterMediumStyle];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
NSString *tempAlarm = [dateFormatter stringFromDate:timerRec.alarmTime];
NSLog(@"scheduleAlarm for firedate: %@", tempAlarm);

[CCUtility scheduleAlarmForDate: timerRec.alarmTime alarmSound:
    [CCUtility convertSoundCodeToFileName: [timerRec.soundCode intValue]]
alarmMessage: message repeatInterval: repeatInterval];

これに関するヘルプは大歓迎です。追加のコードを投稿することはできますが、主な問題は、NSDate の使用方法と、機内モードでシステム クロックが舞台裏でどのように動作するかについて、奇妙なことのようです。

ありがとう、

ケビン

4

1 に答える 1

1

日付を保存するときにタイムゾーンを考慮しない形式を使用している可能性があります。

NSDateFormatter を使用する代わりに、timerRec NSDate を直接 NSLog しないのはなぜですか? さらに、NSDate を直接ログに記録すると、NSDate に関するタイムゾーン + DST 情報がコンソールに表示されますが、使用する NSDateFromatterMediumStyle は表示されません (この日付スタイルを使用することは、明らかに、TZ および DST に関するこのような問題のデバッグに使用する最適なスタイルではありません)。 !)

于 2011-06-17T20:45:54.610 に答える