NSTimer - если оператор не работает в таймере - CountDown Timer - PullRequest
0 голосов
/ 13 ноября 2010

Я работаю над таймером обратного отсчета и у меня возникают проблемы с получением оператора if, чтобы остановить таймер, когда счетчик меньше 0. Любые рекомендации по решению этой проблемы будут с благодарностью. Заранее спасибо за помощь ..

   -(void) startCountdown{
time = 90;
//NSLog[@"Time Left %d Seconds", time];
//This timer will call the function updateInterface every 1 second

   myTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(updateInterface:) userInfo:nil repeats:YES];
}



-(void) updateInterface:(NSTimer*)theTimer{
if(time >= 0){
    time --;
    CountDownText.text = [NSString stringWithFormat:@"%d", time];
    NSLog(@"Time Left %d Seconds", time);
}
else{
    CountDownText.text =@"Times Up!";
    NSLog(@"Times Up!");
    // Timer gets killed and no longer calls updateInterface
    [myTimer invalidate];
}
}

Ответы [ 2 ]

1 голос
/ 14 ноября 2010

Я проверил ваш код, и он работал отлично, а таймер остановился на -1. Поэтому я предпочитаю, чтобы time могло быть объявлено как значение без знака, поэтому оно никогда не становится меньше нуля.

0 голосов
/ 14 ноября 2010

Похоже, ваш обратный отсчет не остановится, пока не достигнет -1 (вместо 0), потому что вы проверяете, что больше-или- равно нулю, а затем уменьшается (и затем отображается).

Либо сначала уменьшите, а затем проверьте, больше ли времени ноль:

-(void) updateInterface:(NSTimer*)theTimer{
    time --;
    if(time > 0){
        CountDownText.text = ...

, либо проверьте, больше ли времени 1:

-(void) updateInterface:(NSTimer*)theTimer{
    if(time > 1){
        time --;
        CountDownText.text = ...
...