Таймер не обновляется, когда приложение переходит на передний план на задний план - PullRequest
0 голосов
/ 30 ноября 2011

Я пытаюсь запустить приложение таймера обратного отсчета.

Когда я переходил из Фона в фоновый режим, каждый раз, когда мой таймер запускался за 1 секунду,

Я получал системное время при запуске приложения вфон и получить разницу между временем, когда приложение приходит в forground с этим кодом,

        NSDate *oldDate = [dateFor dateFromString:oldD];
        NSLog(@"Old Date in Timer : %@",oldDate);

        NSDate *newcurrentdate = [NSDate date];
        NSLog(@"NEWCURRENTDATE:%@",newcurrentdate);

        NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
        NSUInteger unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
        NSDateComponents *componentsss = [gregorianCalendar components:unitFlags
                                                              fromDate:oldDate
                                                                toDate:newcurrentdate
                                                               options:0];
        [gregorianCalendar release];

С этим я получил diff.в течение определенной секунды, когда приложение переходит из фона на передний план,

и добавьте эту секунду к моему коду таймера для обновления таймера,

     ticks =ticks + 1;    
        if(ticks > 59)
        {
            minute = minute + 1;
            ticks = 0;
            if(minute > 59)
            {
                hour = hour + 1;
                minute = 0;
                if(hour > 23)
                {
                    hour = 0;
                }
            }
        }

Когда время запуска в первый раз, оно работает нормально, но при поступленииот фона к фону это таймер запускается с секундной задержкой каждый раз,

Я пытаюсь добавить 1 секунду в своем коде, но это не дает определенного значения таймера,

Как я могу это сделать?

1 Ответ

0 голосов
/ 30 ноября 2011

Вместо того, чтобы считать тики, увеличивая переменную, вам будет проще получить разницу между текущим временем и датой начала, используя timeIntervalSinceNow или timeIntervalSinceDate?

Чтобы получить минуты и часы из этого интервала на лету, вы можете сделать следующее:

minute = ((int) (ticks / 60)) % 60;
hour = ((int) (ticks / 3600)) % 24;

Это должно дать гораздо более точное время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...