2014-01-12 5 views
0
-(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 и многие другие способы, но по какой-то причине, когда я нажимаю кнопку, таймер не делает недействительным.NSTimer не признает недействительным

+1

Вызывается метод 'loadWeb:' несколько раз? Является ли 'self.checkForAdd' использоваться где-нибудь еще? – Wain

+0

Поместите NSLog в loadWeb и в button1, а в button1 запишите значение checkForAdd. Вероятно, вы обнаружите, что либо loadWeb вызывается больше раз, чем кнопка1, либо эта кнопка1 равна нулю. –

ответ

0

Проверьте, если loadWeb: вызывается несколько раз. Если это так, у вас будут запущены старые таймеры без ссылки на них, поэтому вы не можете их аннулировать. Перед созданием нового таймера у вас должно быть [self.checkForAdd invalidate];.

Когда вы делаете invalidate таймер, если вы не создаете новый, установите self.checkForAdd = nil;, чтобы убедиться, что вы больше не будете пытаться использовать таймер (некоторые действия будут генерировать исключение, если вы это сделаете).

Если в любой момент вы делаете self.checkForAdd = nil;, не имея invalidate d таймера, то у вас нет ссылки на него, так что вы не сможете invalidate его в будущем.

0

В соответствии с вашим кодом loadWeb запускается кнопкой. Таким образом, вы будете создавать новый таймер каждый раз, когда кнопка будет нажата. Лучше вы создаете таймер на каком-то другом месте, например, создаете в init или в методе viewDidLoad, потому что, если вы создаете это здесь, вам нужно убедиться, что вы не создаете таймер снова и снова. Вы можете сделать это, выполнив if проверку

if(!self.checkForAdd){ 
self.checkForAdd = [NSTimer scheduledTimerWithTimeInterval:0.4 
     target:self selector:@selector(checkForAddToCart:) userInfo:nil 
     repeats:YES]; 
} 

Сейчас ее создание нового таймера на кнопку крана, и предыдущая не имеют никакого отношения.

 Смежные вопросы

  • Нет связанных вопросов^_^