1

次のような単純なリクエストをロードする UIWebView があります。

NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"derp.com"] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:15.0];
[webView loadRequest:theRequest];

webView で JavaScript を実行する別のメソッドがあります。このメソッドは、さまざまなソース (webViewDidFinishLoad および viewDidAppear を含む) から複数回呼び出すことができます。エラーから保護するために、次のように if ステートメントでこれをラップしました。

if (!self.webView.loading) {
     ... do stuff....
}

問題は self.webView.loading が常に 0 であることです。オブザーバーをセットアップしようとしました (いくつかの異なるバリエーションを試してみました.... sytnax が 100% 確実ではありません):

[self addObserver:self forKeyPath:@"webView.loading" options:0 context:NULL];

しかし、observeValueForKeyPath:ofObject:change:context: は呼び出されません。

4

2 に答える 2

1

UIWebViewDelegate メソッドを実装する方が良い...

viewDidLoad でデリゲートを設定します。

[webView setDelegate:self];

使用できます

- (void)webViewDidFinishLoad:(UIWebView *)webView { // ロードされた処理を行う }`

ロードが完了したときにコールバックを取得するには、KVO をいじるよりもはるかに信頼性が高くなります。

于 2013-03-27T16:59:16.593 に答える
0

UIWebView docを見て

isLoading = YES 受信者がまだコンテンツを読み込んでいる場合。そうでなければ、いいえ。では、この時点で Web ビューの読み込みがすでに終了している可能性はありますか?

于 2013-03-27T17:02:39.010 に答える