2014-02-15 3 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

힌트 : if/else 문 대신에 필요한 경우 앞에 오는 0이있는 두 자리를 얻기 위해'% 02li'을 사용하십시오. 문서를 학습하면 코드 줄을 절약 할 수 있습니다. – zaph

+0

힌트 : 자동으로 코드 들여 쓰기를하려면 코드를 선택한 다음 control-i를 입력하십시오. "코드를 읽을 수 없다면 코드를 수정할 수 없습니다"라고 Willie Jack Degel이 역설했습니다. – zaph

답변

0

모든 변수는 double 형이어야합니다. 그렇지 않으면 정수 나누기가 수행되고 (결과는 0입니다.) 변환되어 double 변수 (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]; 
} 

답을 댓글에 반대 서식 지정. 논리 오류가 수정되지 않았습니다.