如何在此计时器回调方法中单击按钮时停止NSTimer

时间:2012-07-22 08:36:23

标签: objective-c ios nstimer

我在点击按钮时停止NSTimer时出现问题。 {I} [timer invalidate]timer = nil;在我尝试停止viewWillDisappear时也不执行任何操作,也不会在此计时器调用的方法调用的方法中执行任何操作。但是当我在viewWillAppear中启动计时器并在viewWillDisappear中使其无效时,一切都很好。

我想在线程中可能存在问题我正在启动计时器。你可以帮忙吗?

我查看了所有关于NSTimer没有停止的答案,但他们没有帮助解决问题。

我初始化计时器的方式:

timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(oneSecondPassedSinceRoundStarted) userInfo:nil repeats:YES];  

我试图阻止它的方式:

[self.timer invalidate];
[timer invalidate];

2 个答案:

答案 0 :(得分:8)

有趣的是,在您寻求帮助后,您能够快速回答自己的问题。无论你多久都在努力寻找答案:

[self performSelectorOnMainThread:@selector(stopTimer) withObject:nil waitUntilDone:YES];

选择器:

- (void) stopTimer
{
    [timer invalidate];
    timer = nil;
}

答案 1 :(得分:5)

我已经创建并测试了这个:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    myTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(oneSecondPassedSinceRoundStarted:) userInfo:nil repeats:YES];
}

-(void)oneSecondPassedSinceRoundStarted:(NSTimer *)time {
    // Do what You want

    NSLog(@"CALLING!");
}

-(IBAction)buttonAction:(id)sender {

    NSLog(@"Stop timer!");

    [myTimer invalidate];
    myTimer = nil;
}

它工作得很好。

注意:您忘记在 oneSecondPassedSinceRoundStarted 之后添加冒号。