У меня есть приложение, которое воспроизводит звук будильника в назначенное время. Это настроено как повторяющийся будильник, который будет срабатывать каждый день в одно и то же время. Например: просыпаться в 6 утра каждый день.
Я впервые заметил проблему после перехода на летнее время. У меня был бы будильник, который я создал в декабре (например), чтобы он срабатывал в 6 утра каждое утро. После марша будильник стал срабатывать на 1 час раньше (может быть и позже, не помню). Но когда я пытался отладить проблему, этого никогда не происходило, и к тому времени, когда я сел, чтобы по-настоящему разобраться в ней, я не смог воспроизвести проблему.
В последнее время, когда я ложусь спать, я ставлю свой телефон в режим полета. Это, кажется, воспроизводит проблему гораздо чаще. Но бывают случаи, когда все работает нормально. Но если я проверю время будильника после того, как перейду в режим полета, оно окажется на час позже, чем я создал. NSDate появится в моей таблице будильников в 7 утра вместо 6 утра. Но иногда он появляется как 6 утра. Поэтому я включаю сигнализацию. Но на следующее утро будильник срабатывает в 7 утра.
Я думаю, что это связано с летним временем и телефоном, не знающим, находится ли он в летнее время для объекта NSDate. Однако на самом деле время, отображаемое на моем телефоне, никогда не было неправильным. Но у меня будильник срабатывает не вовремя.
Вот пример моего кода: Примечания: timerRec — это структурированная запись из моей базы данных. alarmTime — это объект NSDate, извлеченный из базы данных. подключен к отладчику, он никогда не подводил.
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 и как системные часы работают за кулисами в режиме полета.
Спасибо,
Кевин