2010-07-05 3 views
0

Я пытаюсь создать секундомер с HH: MM: SS, код выглядит следующим образом:NSTimer - Секундомер

-(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]; 
} 

Хотя выход делает увеличивается на 1 секунду, как ожидается, формат вывода является XX : YY: ZZZZZZZZ, где XX - секунды.

Любые мысли ???

ответ

6

Ваш stringWithFormat просит 3 целых, но вы передаете только в одном;)

Вот код, который я использовал, прежде чем делать то, что я думаю, что вы пытаетесь сделать:

- (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]]; 
} 

использовать его с таймером, выполните следующие действия:

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

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

где CURRENTTIME является NSTimeInterval, что вы хотите, чтобы подсчитать один раз в секунду.

+0

Спасибо, YY, ZZ, был форматом, который отображался с вышеуказанным кодом. Но я изменил его на: time.text = [NSString stringWithFormat: @ "% 02i:% 02i:% 02i", second/(60 * 60), second/60, second]; на основе того, что вы предлагаете, и формат не HH: MM: SS, но мои секундомеры перестают считаться после 1. Любые идеи? – Stephen

+0

Первая строка вашего метода [time.text intValue] - нет intValue строки, такой как HH: MM: SS, поэтому intValue возвращает 0 каждый раз. Вам нужно добавить переменную в свой класс для хранения currentTime. См. Мое редактирование для некоторого кода, который я использовал ранее, чтобы сделать это. – deanWombourne

+0

Все работает сейчас, спасибо. – Stephen

Смежные вопросы