-(IBAction) loadWeb: (id) sender {
[_webView loadRequest:nsrequest2];
_webView1.hidden = YES;
_webView.hidden = NO;
self.checkForAdd = [NSTimer scheduledTimerWithTimeInterval:0.4
target:self selector:@selector(checkForAddToCart:) userInfo:nil
repeats:YES];
}
-(IBAction)button1:(id)sender {
[self.checkForAdd invalidate];
}
我如何使timer
无效?我在没有self
和许多其他方式的情况下尝试过,但出于某种原因,当我按下按钮时,计时器不会失效。
答案 0 :(得分:0)
检查是否多次调用loadWeb:
。如果是,您将使旧的计时器在没有引用它们的情况下运行,因此您无法使它们失效。在创建新计时器之前,您应该[self.checkForAdd invalidate];
。
当您执行invalidate
计时器时,如果您没有创建新计时器,请设置self.checkForAdd = nil;
以确保您不会再次尝试使用计时器(某些操作会抛出一个如果你这样做则例外。)
如果您在self.checkForAdd = nil;
没有invalidate
d计时器的情况下执行invalidate
,那么您将无法参考该计时器,因此您无法{{1}}将来
答案 1 :(得分:0)
根据您的代码,按钮会触发loadWeb
。因此,每当按下按钮时,您将创建新的计时器。最好在其他地方创建计时器,比如在init中创建,或者在viewDidLoad方法中创建计时器,因为如果你在这里创建它,你必须确保你不是一次又一次地创建计时器。您可以通过执行if
检查
if(!self.checkForAdd){
self.checkForAdd = [NSTimer scheduledTimerWithTimeInterval:0.4
target:self selector:@selector(checkForAddToCart:) userInfo:nil
repeats:YES];
}
现在它在按钮点击上创建新计时器,而前一个计时器没有参考。