应用程序前景到后台时,计时器不会更新

时间:2011-11-30 09:43:07

标签: iphone objective-c cocoa-touch ios4 timer

我尝试运行倒数计时器应用程序。

当我从背景到Forground时,每当我的计时器开始落后1秒时,

我在应用程序在后台和后台运行时获得了系统时间使用此代码获取app 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];

有了这个,我得到了差异。当app从背景到前景时,特别是秒,

并将此秒添加到我的更新计时器的计时器代码

     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 :(得分:0)

不是通过递增变量来计算滴答,而是使用timeIntervalSinceNow或timeIntervalSinceDate更容易获得当前时间和开始日期之间的差异?

要在此时间间隔内获得分钟和小时,您可以执行以下操作:

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

这应该提供更准确的时间。