2010-07-22 7 views
0

J'utilise actuellement l'extrait de code présenté ci-dessous pour déclencher certaines méthodes toutes les secondes. Mon application est en cours d'exécution en arrière-plan. Le problème est que si l'ordinateur se réveille après une période de sommeil, la minuterie veut déclencher rétroactivement toutes les méthodes qu'il a manqué. Des problèmes similaires se présentent si l'utilisateur devait modifier l'heure de l'horloge système.NSTimer: Obtenir le déclenchement pour NE PAS agir rétroactivement

Fondamentalement, je veux mettre en œuvre la méthode de minuterie appropriée qui aura mes méthodes appelées seulement toutes les secondes actuelles d. Si une seconde (ou une minute ou une heure ou un jour) s'est écoulée et que, pour une raison quelconque, les méthodes n'ont pas été appelées, je veux que mon application continue à partir du moment présent.

Aussi, pouvons-nous garder cela tout en utilisant NSTimer?

Merci!

-(void)start 
{ 
     NSTimer * timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(tasks:) userInfo:nil repeats:YES]; 
[[NSRunLoop currentRunLoop] addTimer:timer forMode: NSDefaultRunLoopMode]; 
} 
+0

Mac uniquement, iOS uniquement ou les deux? –

+0

@Dave, Mac seulement pour le moment. –

Répondre

0

Pour gérer les grands changements de temps, vous pouvez utiliser le link UIApplicationSignificantTimeChangeNotification et désenregistrer/ré-enregistrer votre minuterie.

+0

Est-ce que ce n'est pas pour iOS, c'est-à-dire pour l'iPhone? –

+0

Ah, je passe trop de temps sur iOS, l'équivalent est 'NSSystemClockDidChangeNotification' sur le bureau. http://developer.apple.com/fr/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSDate_Class/Reference/Reference.html#//apple_ref/doc/uid/20000188-SW94 –

0

Pour faire face à la question du sommeil, vous pouvez désenregistrer puis réenregistrer votre minuterie chaque fois que la machine va dormir et se réveille. Voir ce technical note pour savoir comment faire cela. Cette solution ne fonctionnera pas pour changer l'heure du système, cependant.

+0

Merci pour l'aide, mais j'essaie spécifiquement de résoudre le problème en utilisant la programmation de la minuterie. Tuez deux (ou plus) oiseaux avec une pierre, si vous voyez ce que je veux dire;) –

Questions connexes