Question

J'ai une application, le son de l'alarme à une heure planifiée. Ceci est configuré comme une alarme récurrente qui se déclenchera chaque jour en même temps. Par exemple: Réveillez-vous à 6h du matin tous les jours.

J'ai d'abord remarqué un problème après la transition DST. J'aurais une alarme que j'ai créée en décembre (par exemple) pour partir à 6h du matin tous les matins. Après mars, l'alarme a commencé à se déclencher 1 heure plus tôt (ou aurait pu être plus tard, je ne me souviens pas). Mais quand j'ai essayé de déboguer le problème, cela n'arriverait jamais, et au moment où je me suis assis pour vraiment creuser, je ne pouvais pas reproduire le problème.

Récemment, lorsque je me couche, j'ai mis mon téléphone en mode avion. Cela semble reproduire le problème beaucoup plus fréquemment. Mais il y a des moments où tout fonctionne bien. Mais si je vérifie les temps d'alarme après mon passage en mode avion, ils semblent être une heure plus tard que je n'ai créé. Le NSDate apparaîtra dans ma table d'alarme à 7h du matin au lieu de 6h du matin. Mais parfois, il apparaît à 6 heures du matin. Alors j'allume l'alarme. Mais le lendemain matin, l'alarme se déclenche à 7h du matin.

Je pense que cela a à voir avec DST et le téléphone ne sachant pas si c'est dans DST pour l'objet NSDate. Cependant, le temps réellement montré sur mon téléphone n'a jamais été faux. Mais mes alarmes se déroulent au mauvais moment.

Voici un échantillon de mon code: Notes: Timerrec est un enregistrement structuré de ma base de données Alarmtime est un objet NSDate tiré de la base de données, la valeur NSLog est là pour le débogage pour voir si je peux le faire imprimer, mais quand je suis Connecté au débogueur, il n'a jamais échoué.

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];

Toute aide à ce sujet serait grandement appréciée. Je peux publier du code supplémentaire, mais le problème principal semble être quelque chose de bizarre sur la façon dont j'utilise NSDate et comment l'horloge système fonctionne dans les coulisses en mode avion.

Merci,

Kevin

Était-ce utile?

La solution

Vous utilisez probablement un format qui ne prend pas compte du fuseau horaire lors du stockage de votre date.

Pourquoi ne pas nslog votre TimeRrec NSDate directement au lieu d'utiliser un NSDateFormatter? De plus, la journalisation du NSDate affichera directement les informations sur le fuseau horaire + DST sur le NSDate dans la console, tandis que le NSDatefromatterMediumStyle que vous utilisez ne pas (l'utilisation de ce Datestyle n'est évidemment pas vraiment le meilleur style à utiliser pour déboguer de tels problèmes RegaDing TZ & DST !)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top