我在点击按钮时停止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];
答案 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 之后添加冒号。