我有一個應用程序在預定時間播放警報聲。 這是設置爲每天同時關閉的重複警報。例如:每天早上6點起牀。NSDate在飛機模式或DST轉換後滑倒或轉彎一小時
我首先注意到DST轉換後的一個問題。我會在12月份創建一個鬧鐘,例如每天早上6點關閉。行軍結束後,警報開始提前1小時(或者可能遲到,不記得)。但是當我試圖調試這個問題時,它永遠不會發生,當我坐下來真正深入研究它時,我無法重現這個問題。
最近,當我上牀睡覺的時候,我一直把我的手機置於飛機模式。這似乎更頻繁地重現問題。但有些時候, 一切正常。但是如果我在進入飛機模式後檢查報警時間,它們會比我創建的時間晚一個小時。 NSDate將在上午7點而不是早上6點在我的報警表中顯示 。但有時它顯示爲早上6點。所以我打開了報警器。但第二天早上7點鬧鐘響起。
我認爲它與DST和手機不知道它是否在DST中爲 NSDate對象。但是,我手機上顯示的實際時間從未出錯。但是我的警報在錯誤的時間出現。
這裏是我的代碼示例: 注: timerRec是從我的數據庫 alarmTime是的NSDate對象從數據庫中 拉到一個結構化記錄的NSLog的價值是有調試,看看我是否能得到它打印出錯 但是,當我連接到調試器時,它永遠不會失敗。
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以及系統時鐘如何在飛行模式下在幕後工作。
感謝,
凱文