2010-07-05 3 views
0

J'ai essayer de créer un chronomètre avec HH: MM: SS, le code est le suivant:NSTimer - Chronomètre

-(IBAction)startTimerButton; 
{ 
    myTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(showActivity) userInfo:nil repeats:YES]; 
} 


-(IBAction)stopTimerButton; 
{ 
    [myTimer invalidate]; 
    myTimer = nil; 
} 


-(void)showActivity; 
{ 
    int currentTime = [time.text intValue]; 
    int newTime = currentTime + 1; 
    time.text = [NSString stringWithFormat:@"%.2i:%.2i:%.2i", newTime]; 
} 

Bien que la sortie ne s'incrémente de 1 seconde comme prévu, le format de sortie est XX : YY: ZZZZZZZZ, où XX sont les secondes.

Quelqu'un a des idées?

Répondre

6

Votre stringWithFormat demande 3 entiers mais vous ne passant dans l'un;)

Voici un code que je l'ai utilisé avant de faire ce que je pense que vous essayez de le faire:

- (void)populateLabel:(UILabel *)label withTimeInterval:(NSTimeInterval)timeInterval { 
    uint seconds = fabs(timeInterval); 
    uint minutes = seconds/60; 
    uint hours = minutes/60; 

    seconds -= minutes * 60; 
    minutes -= hours * 60; 

    [label setText:[NSString stringWithFormat:@"%@%02uh:%02um:%02us", (timeInterval<[email protected]"-":@""), hours, minutes, seconds]]; 
} 

à utiliser avec une minuterie, faites ceci:

... 
    [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateTimer:) userInfo:nil repeats:YES]; 
    ... 

- (void)updateTimer:(NSTimer *)timer { 
    currentTime += 1; 
    [self populateLabel:myLabel withTimeInterval:time; 
} 

où currentTime est un NSTimeInterval que vous voulez compter par un à chaque seconde.

+0

Merci, YY, ZZ, était le format qui était affiché avec le code ci-dessus. Mais je l'ai changé pour: time.text = [NSString stringWithFormat: @ "% 02i:% 02i:% 02i", deuxième/(60 * 60), second/60, second]; En fonction de ce que vous suggérez et le format n'est pas HH: MM: SS mais mes secondes arrêtent de compter après 1. Des idées? – Stephen

+0

La première ligne de votre méthode est [time.text intValue] - il n'y a pas d'intValue d'une chaîne comme HH: MM: SS donc intValue retourne 0 à chaque fois. Vous devez ajouter une variable à votre classe pour stocker le currentTime. Voir ma modification pour un code que j'ai déjà utilisé pour le faire. – deanWombourne

+0

Tout fonctionne maintenant, merci. – Stephen