我在ViewController类中有NSTimer ..并且NStimer的所有方法都在该类中..我的NSTimer正常工作以进行播放和暂停...当我按下iPhone上的主页按钮时,计时器也正常工作(它当应用程序进入前台时,从应用程序进入后台的时间开始运行... ...在我的应用程序中,当应用程序进入前台时,我会快速发出警报(应用程序中的UIAlertview为didEnterForeGround)。在屏幕上显示警报时我的NSTimer正在运行(没有响应警报)..我想停止NSTimer向用户响应我的警报...之后我想启动NSTimer ...如何我能这样做吗?请帮助我......在此先感谢...我想从Appdelegate.m文件中调用NSTimer方法...我正确地调用这些方法...并调用ViewController中的方法..但操作不执行。 ..对于来自viewController类的调用时的Same方法,它正在工作......
enter code here
ViewController.h
+(ExamViewController *)evcInstance;
ViewController.m
ExamViewController *evc = nil;
@implementation ExamViewController
+(ExamViewController *)evcInstance
{
if(!evc)
{
evc = [[ExamViewController alloc] init];
}
return evc;
}
- (void)onStartPressed
{
stopwatchtimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(updateTimer:) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:stopwatchtimer forMode:NSRunLoopCommonModes];
resume.hidden = YES;
resume.enabled=NO;
pause.hidden = NO;
pause.enabled=YES;
}
- (void)onStopPressed
{
[stopwatchtimer invalidate];
stopwatchtimer = nil;
pause.hidden = YES;
pause.enabled=NO;
resume.hidden = NO;
resume.enabled=YES;
}
Appdelegate.m
- (void)applicationWillEnterForeground:(UIApplication *)application
{
[[ExamViewController evcInstance] onStopPressed];
NSLog(@"applicationWillEnterForeground");
if(viewCalled ==YES)
{
UIAlertView *alertview=[[UIAlertView alloc]initWithTitle:@"" message:@"DO! You Want To continue" delegate:self cancelButtonTitle:@"YES" otherButtonTitles:@"NO", nil];
[alertview show];
[alertview release];
}
/*
Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
*/
}
答案 0 :(得分:1)
一些事情:
1)它看起来像一个不完整的单件设计。如果您真的想要单身人士,请参阅帖子like this one。
2)无需在当前运行循环中添加秒表。 scheduledTimerWithTimeInterval方法为您安排它。
3)我没有看到你宣布秒表计时器的位置,但一定要将其声明为保留属性(或ARC中的强项)。
4)要停止计时器,只需调用[stopwatchtimer invalidate];
要重新启动计时器,请使用您最初调用的相同scheduledTimerWithTimeInterval类方法重新实例化并覆盖旧计时器。
5)要在警报视图完成时执行任何操作,请实现委托方法:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
因此,您可以在显示警报之前使计时器无效,然后在收到警报通知后重建它。