Objective c 如何停止此计时器回调方法中单击按钮时启动的NSTimer

Objective c 如何停止此计时器回调方法中单击按钮时启动的NSTimer,objective-c,ios,nstimer,Objective C,Ios,Nstimer,我在单击按钮停止计时时遇到问题[计时器失效]和计时器=nil当我试图停止它时,请不要执行任何操作视图将消失,也不要在由该计时器调用的方法调用的方法中执行任何操作。但是,当我在视图中启动计时器时,计时器将出现,并在视图中使其无效,计时器将消失一切正常 我想启动计时器的线程中可能有问题。你能帮忙吗 我在这里查看了所有关于NSTimer不停止的答案,但它们无助于解决问题 我初始化计时器的方式: timer = [NSTimer scheduledTimerWithTimeInterval:1.0 ta

我在单击按钮停止计时时遇到问题<代码>[计时器失效]和
计时器=nil当我试图停止它时,请不要执行任何操作
视图将消失
,也不要在由该计时器调用的方法调用的方法中执行任何操作。但是,当我在
视图中启动计时器时,计时器将出现
,并在
视图中使其无效,计时器将消失
一切正常

我想启动计时器的线程中可能有问题。你能帮忙吗

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

我初始化计时器的方式:

timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(oneSecondPassedSinceRoundStarted) userInfo:nil repeats:YES];  
我试图阻止它的方式:

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

我已经创建并测试了以下内容:

- (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;
}
它工作得很好


注意:在OneSecondPassedSincerounds启动后,您忘记添加冒号。

有趣的是,在您请求帮助后,您可以如此快速地回答自己的问题。无论你自己在寻找答案之前挣扎了多久:

[self performSelectorOnMainThread:@selector(stopTimer) withObject:nil waitUntilDone:YES];
和选择器:

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

如何初始化计时器?还要检查您的指针是否已分配。亚当,我编辑了我的问题并添加了一些代码。@roman:如果您没有得到解决问题的答案,您不应该接受随机答案。请记住,如果您自己解决了问题,您可以接受自己的答案。在尝试使计时器无效之前,您可能会覆盖计时器成员或将其置零吗?另外,您应该从.Georg中调度的同一线程中进行失效,谢谢您的输入。巧合的是,我刚刚找到了我自己问题的答案。我想说的是,这个系统不鼓励人们问太复杂的问题。就好像我是个坏蛋,拒绝给别人名誉或认可。不太好。对不起,我编辑了我的问题。实际上,我在计时器的回调方法中遇到了停止计时器的问题。我真的很抱歉误导了你。