2016-11-15 100 views
2

我已使用NSTimer類別創建具有https://github.com/jivadevoe/NSTimer-Blocks的塊的計時器。我試圖使我的方法之一在計時器被解僱之前使計時器失效,但它不起作用。我的代碼如下:使用尚未被觸發的塊使NSTimer失效:Objective-C

-(void)addQuestionView 
{ 
    if([resizeTimer isValid]) 
      [resizeTimer invalidate]; 
    . 
    . 
    . 
    . 
    . 

    [webView loadHTMLString:questionHtmlStr 
      baseURL:nil]; 
} 

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    resizeTimer = [NSTimer scheduledTimerWithTimeInterval:4.0 block:^{ 

    //calculating height based on content 
    //changing webView's contsraints 


    } repeats:NO]; 

    . 
    //long process 
    //animation 
    . 

} 

如在上面的代碼中,如果稱爲第一時間addQuestionView方法,計時器將設置後4秒運行。如果立即調用addQuestionView,說1秒後,我想resizeTimer無效,以避免在計算高度和更改webView約束的任何不當行爲。我通過NSLogging檢查了一些值,它沒有失效,並被調用兩次。任何人都有解決方案,那麼請幫助我。

謝謝!

+1

你有沒有檢查了'invalidate'是在其上安裝定時器同一線程發送? – clemens

+0

@Rob。謝謝你指出我。 「webViewDidFinishLoad在舊計時器失效/啓動之前再次被調用。」 - 同樣的事情發生。 – iAkki

回答

0

你應該確保你實例化一個新的計時器前失效之前定時器(如果有的話),例如:

- (void)webViewDidFinishLoad:(UIWebView *)webView { 
    if ([resizeTimer isValid]) 
     [resizeTimer invalidate]; 

    resizeTimer = [NSTimer scheduledTimerWithTimeInterval:4.0 block:^{ 
     ... 
    } repeats:NO]; 

    .... 
}