2009-10-19 15 views
1

J'ai une étiquette sur laquelle je montre le compte à rebours. Maintenant, si je ferme mon application, la minuterie sera éteinte et le texte de l'étiquette aussi. Je sais que nous pouvons sauvegarder la valeur du texte de l'étiquette. Mais comment montrer le compte à rebours correct lorsque l'application redémarre?Est-il possible de sauvegarder l'état d'une minuterie dans les paramètres utilisateur par défaut?

On suppose que je ferme à 00:05:35 après 3 minutes lorsque l'application est lancée à nouveau l'étiquette doit 0:02:35 et la minuterie devrait être là pour le compte à rebours restant

Répondre

8

Oui, stocker simplement le temps que votre application a été fermée et le temps de décompte dans NSUserDefaults. Lorsque l'application redémarre, vous obtenez l'heure de fermeture de NSUserDefaults et le temps restant. En utilisant l'heure actuelle, il est simple de calculer le temps corrigé restant sur votre compte à rebours.

Quelque chose comme cela pourrait faire l'affaire, non testé bien sûr:

// save state 
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
NSDate *now = [NSDate date]; 
double countDown = 45.0; // in seconds, get this from your counter 
[userDefaults setObject:now forKey:@"timeAtQuit"]; 
[userDefaults setDouble:countDown forKey:@"countDown"]; 
[userDefaults synchronize]; 


// restore state 
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
NSDate *timeAtQuit = [userDefaults objectForKey:@"timeAtQuit"]; 
double timeSinceQuit = [timeAtQuit timeIntervalSinceNow]; 
double countDown = timeSinceQuit + [userDefaults doubleForKey:@"countDown"]; 
+0

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/UserDefaults/UserDefaults.html et http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/DatesAndTimes /DatesAndTimes.html sera probablement utile à lire. –

+0

pouvez-vous poster un exemple de code –

+0

J'ai ajouté un exemple de code à la réponse. –

2

Ou vous pouvez simplement calculer la date/heure (NSDate) vous voulez qu'il expire et sauf que dans vos paramètres par défaut. Lors de la relance, comparez-la par rapport à cette date pour savoir si elle a expiré ou si vous devez définir une minuterie pour capturer l'expiration future.