2010-10-21 4 views
0

J'essaie d'utiliser timeIntervalSinceReferenceDate et je ne suis pas tout à fait sûr si je le comprends correctement. J'ai essentiellement un bouton pour calculer la différence de temps entre le moment où le bouton de démarrage et d'arrêt est pressé.Minuterie simple dans l'iPhone

- (IBAction)startButtonPressed { 
    startButtonFlag = !startButtonFlag; // first time through, startButtonFlag turns on 
    if (startButtonFlag) { // timer starts 
     [startButton setTitle:@"Stop" forState:UIControlStateNormal]; 
     startTime = [NSDate timeIntervalSinceReferenceDate]; 
     NSLog(@"start time: %d", startTime); 
    } 
    else { // timer stops 
     [startButton setTitle:@"Start" forState:UIControlStateNormal]; 
     stopTime = [NSDate timeIntervalSinceReferenceDate]; 
     NSLog(@"stop time: %d", stopTime);  
     elapsedTime = stopTime - startTime; 
     NSLog(@"elapsed time: %d", elapsedTime); 
    } 

} 

Je ne comprends pas très bien la sortie. Mon exemple de sortie est la suivante: Heure de début: 558828278 temps d'arrêt: 581239552 temps écoulé: -1610612736

J'ai appuyé sur le bouton d'arrêt peu après (5 secondes environ) après avoir appuyé début. Je m'attendais à ce que l'heure d'arrêt soit plus proche de 558828283 donc quand j'ai soustrait les deux fois, pour voir combien de temps s'est écoulé, j'aurais 5 secondes. Suis-je mal comprendre comment fonctionne la méthode de classe? Merci.

Répondre

1

sont-startTime, stopTime et elapsedTime déclaré que le type NSTimeInterval ou double?

Dans ce cas, vous devez utiliser %f au lieu de %d (qui est pour ints).

+0

Merci. Pour une raison quelconque, je pensais que% d était pour décimal. – Crystal

+0

Voir [Spécificateurs de format de chaîne] (http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/Strings/Articles/formatSpecifiers.html%23//apple_ref/doc/uid/TP40004265). – Anna

1

vous pouvez essayer quelque chose comme ceci:

NSDate* start = [NSDate date]; 
... 

NSDate* stop = [NSDate date]; 
NSLog(@"took %lf seconds", [stop timeIntervalSinceDate:start]); 
0

Votre utilisation de la mauvaise fonction:

[NSDate timeIntervalSinceReferenceDate]; 

Crée et retourne un objet NSDate réglé sur un nombre donné de secondes dès le premier instant du 1er Janvier 2001, GMT.

Vous devez utiliser quelque chose comme

dateWithTimeIntervalSinceNow 

Crée et retourne un objet NSDate réglé sur un nombre donné de secondes à partir de la date et l'heure.