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에 의해 일부 값을 검사했는데 무효화되지 않고 두 번 호출되었습니다. 누구나 해결책을 찾았 으면 저를 도와주세요.
감사합니다.
는 invalidate' 타이머를 설치하는 동일한 스레드에서 보낼 수있다 '것을 확인해 봤어 ? – clemens
@Rob. 나를 지적 해 주셔서 고마워요. "이전 타이머가 무효화되거나 해고되기 전에 webViewDidFinishLoad가 다시 호출됩니다." - 같은 일이 일어나고 있습니다. – iAkki