2013-12-07 4 views
0

Я делаю приложение секундомера. Я считаю, что время прошло, поскольку приложение было в фоновом режиме, поэтому я могу добавить его в секундомер, когда приложение вернется на передний план. У меня есть этот код, который вызывается, когда NSNotification отправляется на мой StopwatchViewController с истекшим временем в секундах. Я пытаюсь преобразовать секунды в часы, минуты и секунды:Преобразование секунд в часы, минуты и секунды

-(void)newMessageReceived:(NSNotification *) notification 
{ 

    elapsedTime = [[notification object] intValue]; 

    elapsedHours = elapsedTime/3600; 
    elapsedTime = elapsedTime - (elapsedTime % 3600); 

    elapsedMinutes = elapsedTime/60; 
    elapsedTime = elapsedTime - (elapsedTime % 60); 

    elapsedSeconds = elapsedTime; 

    secondInt = secondInt + elapsedSeconds; 
    if (secondInt > 59) { 
     ++minuteInt; 
     secondInt -= 60; 
    } 

    minuteInt = minuteInt + elapsedMinutes; 
    if (minuteInt > 59) { 
     ++hourInt; 
     minuteInt -= 60; 
    } 

    hourInt = hourInt + elapsedHours; 
    if (hourInt > 23) { 
     hourInt = 0; 
    } 
} 

Объект уведомления присваивается ElapsedTime, но это его; elapsedHours/minutes/seconds все остаются на 0, а elapsedTime остается неизменным. Почему он не работает?

+0

Я бы просто сохранил значение totalTime, увеличил его и * затем * конвертировал в часы/минуты/секунды. Что касается вашего алгоритма, вы испортились с 'elapsedTime = elapsedTime - (elapsedTime% 3600);' lines. Разделите это выражение на отдельные задания, чтобы вы могли изучить промежуточные результаты, и вы найдете свою проблему. –

ответ

1

Вы вычитаете неправильную часть из прошедшего времени. Вы должны вычесть часы не остаток:

elapsedTime = elapsedTime - (elapsedTime/3600) * 3600; 

или вы могли бы использовать эквивалентный расчет:

elapsedTime = elapsedTime % 3600; 
2

Такой подход кажется слишком сложным и подвержен ошибкам.

Почему бы просто не записать время начала (как NSTimeInterval или NSDate) и вычесть из текущего времени, чтобы получить прошедшие секунды?

+0

Тем более, что не гарантируется, что NSTimer (я думаю, этот код основан на таймере) срабатывает в одно и то же время. –

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

  • Нет связанных вопросов^_^