2013-07-30 81 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

的問題是,你是遞減if(testTask.timeInterval == 0)testTask.timeInterval,這種情況從來沒有計算結果爲真(因爲你把它設置爲10)。這就是爲什麼標籤沒有變化的原因。

您需要在第一個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

這對我來說很愚蠢。大聲笑我的壞 – EvilAegis

+0

@ user2533646:我認爲你需要有一杯咖啡:)快樂編碼:) –

2

我相信你的if語句嵌套不正確。像這樣將你的else語句移動到最外面的'if'。

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