Evi*_*gis 1 iphone objective-c nstimer ios uilocalnotification
由于某种原因,我的计时器只在前台运行.我在这里寻找解决方案,但我找不到任何好的解决方案.我的计时器使用Core Data,每次减量后都会保存timeInterval.此外,我发送UILocalNotification,但这不起作用.我假设它不发送警报视图,如果它在前台..这就是我现在拥有的:
-(IBAction)startTimer:(id)sender{
if (timer == nil) {
[startButton setTitle:@"Pause" forState:UIControlStateNormal];
timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerAction:) userInfo:nil repeats:YES];
} else {
[startButton setTitle:@"Resume" forState:UIControlStateNormal];
[timer invalidate];
timer = nil;
}
}
-(void)timerAction:(NSTimer *)t
{
if(testTask.timeInterval == 0)
{
if (self.timer)
{
[self timerExpired];
[self.timer invalidate];
self.timer = nil;
}
}
else
{
testTask.timeInterval--;
NSError *error;
if (![self.context save:&error]) {
NSLog(@"couldn't save: %@", [error localizedDescription]);
}
}
NSUInteger seconds = (NSUInteger)round(testTask.timeInterval);
NSString *string = [NSString stringWithFormat:@"%02u:%02u:%02u",
seconds / 3600, (seconds / 60) % 60, seconds % 60];
timerLabel.text = string;
NSLog(@"%f", testTask.timeInterval);
}
-(void)timerExpired{
UILocalNotification* localNotification = [[UILocalNotification alloc] init];
localNotification.alertBody = @"Time is up";
localNotification.alertAction = @"Ok";
localNotification.timeZone = [NSTimeZone defaultTimeZone];
[[UIApplication sharedApplication]presentLocalNotificationNow:localNotification];
}
Run Code Online (Sandbox Code Playgroud)
我非常感谢让我的计时器在后台运行的一些指导(就像Apple的计时器一样).我不确定如何使用NSDateComponents,因为即使应用程序在后台我也需要更新testTask.timeInterval.
小智 6
UIBackgroundTaskIdentifier bgTask =0;
UIApplication *app = [UIApplication sharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
}];
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(timerCountDown:)
userInfo:nil
repeats:YES];
Run Code Online (Sandbox Code Playgroud)
现在使用此方法来触发通知.计时器将在后台运行.
| 归档时间: |
|
| 查看次数: |
4127 次 |
| 最近记录: |