У меня есть приложение, которое воспроизводит звук будильника в назначенное время.
Это настроено как повторяющаяся тревога, которая будет срабатывать каждый день в одно и то же время.
Например: просыпаться в 6 утра каждый день.
Я впервые заметил проблему после перехода на летнее время. У меня был бы сигнал тревоги, который я создал в декабре (например), чтобы сработать в 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 и как системные часы работают за кадром в режиме полета.
Спасибо
Кевин