2016-11-15 2 views
2

https://github.com/jivadevoe/NSTimer-Blocks에서 블록으로 타이머를 생성하기 위해 NSTimer 카테고리를 사용했습니다. 그 타이머가 해고되기 전에 내 방법 중 하나에서 타이머를 무효화하려하고 있지만 작동하지 않습니다. 위의 코드에서와 마찬가지로아직 해고되지 않은 블록으로 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 방법은 1 시간이라고하면, 타이머가 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]; 

    .... 
} 
관련 문제