2

NSTimer在单击按钮时停止启动时遇到问题。[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];
4

2 回答 2

8

有趣的是,在您寻求帮助后,您可以多快地回答自己的问题。无论您自己努力寻找答案多久:

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

和选择器:

- (void) stopTimer
{
    [timer invalidate];
    timer = nil;
}
于 2012-07-22T09:18:05.377 回答
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;
}

它运行良好。

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

于 2012-07-22T08:57:14.350 回答