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

Rom*_*nok 2 objective-c nstimer ios

NSTimer在按钮点击停止时遇到问题.[timer invalidate]并且timer = nil;不需要做任何事情都不当我试图阻止它viewWillDisappear也不是方法,通过它正在此计时器调用的方法调用.但是,当我启动计时器viewWillAppear并使其无效时,viewWillDisappear一切都很好.

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

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

我初始化我的计时器的方式:

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

我试图阻止它的方式:

[self.timer invalidate];
[timer invalidate];
Run Code Online (Sandbox Code Playgroud)

Rom*_*nok 8

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

[self performSelectorOnMainThread:@selector(stopTimer) withObject:nil waitUntilDone:YES];
Run Code Online (Sandbox Code Playgroud)

而选择器:

- (void) stopTimer
{
    [timer invalidate];
    timer = nil;
}
Run Code Online (Sandbox Code Playgroud)


Jus*_*Boo 6

我创建并测试了这个:

- (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;
}
Run Code Online (Sandbox Code Playgroud)

它工作得很好.

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