2013-07-30 5 views
0

Пытаясь сделать таймер обратного отсчета от заданного NSTimeInterval, метка, похоже, не обновляется.Что не так с моим методом таймера обратного отсчета?

- (IBAction)startTimer:(id)sender{ 
     timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerAction:) userInfo:nil repeats:YES]; 
} 

- (void)timerAction:(NSTimer *)t { 

    if(testTask.timeInterval == 0){ 
     if (self.timer){ 
      [self timerExpired]; 
      [self.timer invalidate]; 
      self.timer = nil; 
     } 

     else { 
      testTask.timeInterval--; 
     } 
    } 

    NSUInteger seconds = (NSUInteger)round(testTask.timeInterval); 
    NSString *string = [NSString stringWithFormat:@"%02u:%02u:%02u", 
         seconds/3600, (seconds/60) % 60, seconds % 60]; 
    timerLabel.text = string; 
} 
+0

testTask задается пользователем, я тестировал его на задаче с временным интервалом в 10 секунд. Он показывает 10 секунд, но ничего не показывает. – EvilAegis

+0

и временной интервал никогда не уменьшается – EvilAegis

+0

Вы поставили точку останова в методе timerAction? это на самом деле называется? –

ответ

2

Проблема в том, вы декремент testTask.timeInterval внутри if(testTask.timeInterval == 0), это условие никогда не принимает значение истина (потому что вы установите его в 10). Вот почему на этикетке нет изменений.

Вам нужно положить этот случай else после первого оператора if (в настоящее время вы разместили его под вторым оператором if).

Вы должны написать свой метод, как:

-(void)timerAction:(NSTimer *)t 
{ 
     if(testTask.timeInterval == 0) 
     { 
      if (self.timer) 
      { 
       [self timerExpired]; 
       [self.timer invalidate]; 
       self.timer = nil; 
      } 
     } 
     else 
     { 
      testTask.timeInterval--; 
     } 
     NSUInteger seconds = (NSUInteger)round(testTask.timeInterval); 
     NSString *string = [NSString stringWithFormat:@"%02u:%02u:%02u", 
         seconds/3600, (seconds/60) % 60, seconds % 60]; 
     timerLabel.text = string; 
} 
+0

Это было очень глупо от меня. LOL my bad – EvilAegis

+0

@ user2533646: Я думаю, вам нужно выпить чашечку кофе :) Счастливое кодирование :) –

2

Я считаю, что ваши операторы if неверно вложены. Перемещайте ваше заявление else к самому внешнему «если» так.

if(testTask.timeInterval == 0){ 
     if (self.timer){ 
      [self timerExpired]; 
      [self.timer invalidate]; 
      self.timer = nil; 
     } 
    } else { 
     testTask.timeInterval--; 
    } 
Смежные вопросы