iOS应用程序终止时继续计时

时间:2014-02-07 02:45:46

标签: ios objective-c timer

当我的应用程序因多任务处理而终止时,如何继续运行计时器?

当应用程序关闭然后重新打开时,我的计时器会继续正常运行,但是当计时器终止时,计时器会继续运行,但不会计算应用程序被杀后的时间。

我的计时器看起来像这样:

-(void)beginTimer {
//hide/unhide stuff
punchIn.hidden = 1;
hhmmssLabel.hidden = 0;
punchOut.hidden = 0;
breakTime.hidden = 0;

hhmmssLabel.text = @"00:00:00";


//timer function
[self unPauseTimer];

pauseTimeInterval = 0;

[[NSUserDefaults standardUserDefaults] setBool:timerIsRunning = YES forKey:@"running"];
[[NSUserDefaults standardUserDefaults] synchronize];
[[NSUserDefaults standardUserDefaults] setBool:onBreak = NO forKey:@"break"];
[[NSUserDefaults standardUserDefaults] synchronize];
[[NSUserDefaults standardUserDefaults] setDouble:pauseTimeInterval forKey:@"pausedTime"];
[[NSUserDefaults standardUserDefaults] synchronize];


}
-(void)endTimer {
//hide/unhide stuff
punchIn.hidden = 0;
hhmmssLabel.hidden = 1;
punchOut.hidden = 1;
breakTime.hidden = 1;

[[NSUserDefaults standardUserDefaults] setBool:timerIsRunning = NO forKey:@"running"];
[[NSUserDefaults standardUserDefaults] synchronize];

//timer function
[self pausedTimer];

[self addToPlist];

second = 0;
pauseTimeInterval = 0;

}

//timer method from RMD
-(void) updateTimer {

NSDate *currentDate = [NSDate date];
NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate];
second = (NSUInteger)round(timeInterval);
NSString *string = [NSString stringWithFormat:@"%02lu:%02lu:%02lu",
                    second / 3600, (second / 60) % 60, second % 60];
hhmmssLabel.text = string;
pauseTimeInterval = timeInterval;

[[NSUserDefaults standardUserDefaults] setDouble:pauseTimeInterval forKey:@"pausedTime"];
[[NSUserDefaults standardUserDefaults] synchronize];


}
-(void)pausedTimer {

[tickerTimer invalidate];
tickerTimer = nil;
}

-(void) unPauseTimer {

startDate = [NSDate date];
startDate = [startDate dateByAddingTimeInterval:((-1)*(pauseTimeInterval))];
[[NSUserDefaults standardUserDefaults] setObject:startDate forKey:@"startDate"];
[[NSUserDefaults standardUserDefaults] synchronize];
tickerTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/1.0 target:self selector:@selector(updateTimer) userInfo:nil repeats:YES];

}

在我的appDelegate中,我有这个:

- (void)applicationWillTerminate:(UIApplication *)application
{
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.

[[ViewController sharedLayer] saveDataOnKill];
}

称之为:

-(void)saveDataOnKill {

[[NSUserDefaults standardUserDefaults] setBool:timerIsRunning = YES forKey:@"running"];
[[NSUserDefaults standardUserDefaults] synchronize];
[[NSUserDefaults standardUserDefaults] setBool:onBreak = NO forKey:@"break"];
[[NSUserDefaults standardUserDefaults] synchronize];
[[NSUserDefaults standardUserDefaults] setDouble:pauseTimeInterval forKey:@"pausedTime"];
[[NSUserDefaults standardUserDefaults] synchronize];
}

我知道计时器知道它停止的地方并继续,但它没有考虑应用程序被杀死后的时间。

1 个答案:

答案 0 :(得分:0)

您可以节省应用程序被杀的时间,获取应用程序重新打开的时间,然后相应地添加时间。