2011-11-30 65 views
0

我嘗試運行倒計時器應用程序。當應用程序前臺到後臺時,定時器沒有調整

當我從背景到Forground,每次我落後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]; 

有了這個我得到了差異。特定秒時應用來自後臺前景,

這秒添加到用於更新計時器我的計時器代碼,

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

當時間開始第一次運行正常,但是從背景的時候forground它與計時器每次背後的一個二次啓動,

我嘗試在我的代碼添加1秒,但它不是給特定的時間值,

我怎麼能這樣做呢?

+0

你如何收到「蜱」?你在使用NSTimer嗎? –

回答

0

不是通過遞增變量來計算滴答,而是使用timeIntervalSinceNow或timeIntervalSinceDate獲取當前時間和開始日期之間的差異會更容易嗎?

要在運行此區間獲得分鐘和小時,你可以做到以下幾點:

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

這應該給更精確的計時。

相關問題