2
NSTimerカテゴリを使用してブロックを持つタイマーをhttps://github.com/jivadevoe/NSTimer-Blocksから作成しました。そのタイマーが起動する前に私のメソッドの1つでタイマーを無効にしようとしていますが、そのタイマーは機能しません。上記のコードのようにまだ起動されていないブロックで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秒後に「height」を計算しwebViewの制約を変更する際の不正行為を避けるため、resizeTimerを無効にします。 NSLoggingによっていくつかの値をチェックしました。無効にされず、2回呼び出されました。誰にでも解決策がありますので、私を助けてください。
ありがとうございます!
あなたは 'invalidate'は、タイマーがインストールされた同じスレッドからの送信であることを確認しました? – clemens
@Rob。私を指摘してくれてありがとう。 "古いタイマーが無効化され/起動される前に、webViewDidFinishLoadが再度呼び出されます。" - 同じことが起こっている。 – iAkki