2014-02-15 2 views
1

Я разрабатываю приложение, которое отслеживает расстояние и т. Д. Я только что реализовал метод отслеживания общего времени с использованием NSTimer, который работает точно так, как я этого хочу. Но мне нужно преобразовать общее время в часы, поэтому я могу использовать его для расчета калорий и средней скорости, но у меня проблемы с этим!Преобразование секундомера в часы

Вот мой метод таймера:

- (void) startStopWatch { 
    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1 
                 target:self 
                selector:@selector(timerController) 
                userInfo:nil 
                repeats:YES]; 
} 

- (void)timerController { 
    _seconds++; 
    NSLog(@"seconds = %zd", _seconds); 
    if (_seconds <10){ 
     NSString *secondsString = [NSString stringWithFormat:@"0%li", (long)_seconds]; 
     _SecondsLabel.text = secondsString; 
    } 
    else{ 
     NSString *secondsString = [NSString stringWithFormat:@"%li", (long)_seconds]; 
     _SecondsLabel.text = secondsString; 
    } 

    if (_seconds == 60){ 
     _minutes++; 
     _seconds = 00; 
     NSString *secondsString = [NSString stringWithFormat:@"0%li", (long)_seconds]; 
     _SecondsLabel.text = secondsString; 
     if (_minutes <10){ 
      NSString *minutesString = [NSString stringWithFormat:@"0%li", (long)_minutes]; 
      _minutesLabel.text = minutesString; 
     } 
     else { 
      NSLog(@"minutes = %zd", _minutes); 
      NSString *minutesString = [NSString stringWithFormat:@"%li", (long)_minutes]; 
      _minutesLabel.text = minutesString; 
     } 
    } 
    if (_minutes == 60){ 
     self.hoursLabel.hidden = NO; 
     _hours++; 
     _minutes = 0; 
     NSString *minutesString = [NSString stringWithFormat:@"%li", (long)_minutes]; 
     _minutesLabel.text = minutesString; 
     NSString *hoursString = [NSString stringWithFormat:@"%li", (long)_hours]; 
     _hoursLabel.text = hoursString; 

    } 
    [self UpdateTotalTime]; 
} 

и вот мой метод, чтобы преобразовать секунды и минуты в часы:

- (void) UpdateTotalTime { 
    _secondsToHours = _seconds/3600; 
    _minutesToHours = _minutes/60; 
    _totalTime = (_secondsToHours + _minutesToHours + _hours); 
    NSLog(@"totaltime = %zd", _totalTime); 
} 

Проблема заключается в том, что ничего не добавляется в _totalTime, любые идеи ? Кроме того, я очень новичок в Objective-C, поэтому я могу пропустить что-то очень простое!

+1

Как объявляются ваши _secondsToHours ... переменные? – Merlevede

+1

Подсказка: просто используйте '% 02li', чтобы получить две цифры с нулевым нулем, если необходимо, вместо операторов if/else. Изучение документации может сохранить строки кода. – zaph

+0

Подсказка: для автоматического исправления кода выберите код, а затем введите control-i. «Если вы не можете прочитать код, вы не можете исправить код« Парафраз из Вилли Джек Дегель. – zaph

ответ

0

Все ваши переменные должны быть удвоены, в противном случае выполняется деление целого числа (результат равен 0) и преобразовывается и присваивается двойной переменной (0.000).

+0

Как только я изменил свои секунды, чтобы удвоить все, все получилось отлично. Спасибо. – Khledon

+0

@ user3254994 Я бы ожидал, что вы пометите мой ответ как правильный, так как это то, что решило вашу проблему. – Merlevede

0

Подобно тому, как пример того, как код может быть уменьшен и сделать более читаемым:

- (void)timerController { 
    _seconds++; 
    NSLog(@"seconds = %zd", _seconds); 

    if (_seconds == 60) { 
     _minutes++; 
     _seconds = 00; 
    } 
    if (_minutes == 60) { 
     self.hoursLabel.hidden = NO; 
     _hours++; 
     _minutes = 0; 
     _hoursLabel.text = [NSString stringWithFormat:@"%li", (long)_hours]; 
    } 
    _minutesLabel.text = [NSString stringWithFormat:@"%02li", (long)_minutes]; 
    _secondsLabel.text = [NSString stringWithFormat:@"%02li", (long)_seconds]; 
    [self UpdateTotalTime]; 
} 

В качестве альтернативы, используйте _totaTime:

- (void)timerController { 
    _totalTime++; 
    NSLog(@"seconds = %zd", _totalTime); 

    int seconds = _totalTime % 60; 
    int minutes = (_totalTime/60) % 60; 
    int hours = _totalTime/3600; 

    if (hours) { 
     self.hoursLabel.hidden = NO; 
     _hoursLabel.text = [NSString stringWithFormat:@"%i", hours]; 
    } 
    _minutesLabel.text = [NSString stringWithFormat:@"%02i", minutes]; 
    _secondsLabel.text = [NSString stringWithFormat:@"%02i", seconds]; 
} 

ответ в отличие от комментария к форматирование. Ошибок в логике не было исправлено.

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