Проблема с отображением секундомера - PullRequest
0 голосов
/ 14 мая 2011

Я скомпилировал следующий код, и нет никаких явных ошибок во время выполнения; однако дисплей останавливается в 00:00:01, когда я его запускаю. Это работает, если я только отображаю атрибут секунд. Кто-нибудь видит очевидное упущение, которое я пропустил в этом коде? Я знаю, что при нажатии кнопки «Пуск» возможна утечка памяти, но я исправлю это в конечном итоге.

Заранее спасибо.

#import "StopwatchViewController.h"

@implementation StopwatchViewController

- (IBAction)start{

    //creates and fires timer every second
    myTimer = [[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(showTime) userInfo:nil repeats:YES]retain];
}
- (IBAction)stop{
    [myTimer invalidate];
    myTimer = nil;
}

- (IBAction)reset{

    [myTimer invalidate];
    time.text = @"00:00:00";
}

(void)showTime{

    int currentTime = [time.text intValue];

    int new = currentTime +1;

    int secs  = new;
    int mins  = (secs/60) % 60;
    int hours = (mins/60);

    time.text = [NSString stringWithFormat:@"%.2d:%.2d:%.2d",hours, mins, secs];
}

Ответы [ 2 ]

3 голосов
/ 14 мая 2011

Вы получаете 0 из

int currentTime = [time.text intValue];

, потому что строка, находящаяся в text:

@"00:00:00"

, не может быть преобразована в int, поэтому каждый разтаймер срабатывает, вы добавляете 1 к 0 и получаете 1, который затем отображаете.В любом случае математика будет неточной, потому что минуты и секунды равны «base-60» * - вам нужно будет выполнить обратную математику, которую вы выполняете для разделения часов / минут / секунд, чтобы снова получить общее количество секунд.Вы можете просто сделать currentTime иваром и сохранить общее количество секунд в нем.


* На самом деле это не так;Я уверен, что есть определенное слово для этого.

2 голосов
/ 16 мая 2011
- (IBAction)start{

    currentTime = 0;

    //creates and fires timer every second
    myTimer = [[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(showTime) userInfo:nil repeats:YES]retain];
}

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

- (IBAction)reset{

    [myTimer invalidate];
    time.text = @"00:00:00";
}

- (void)showTime{

    currentTime++;

    int secs = currentTime % 60;
    int mins = (currentTime / 60) % 60;
    int hour = (currentTime / 3600);


    time.text = [NSString stringWithFormat:@"%.2d:%.2d:%.2d",hour, mins, secs];

}
...