6

UIWebViewのデリゲートがそのようなエラーを返すときに発生する問題を回避しようとしています。デリゲートの実装には、一般的な回避策があります(インターネットのどこでも見ました)。

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {

    if ([error code] == NSURLErrorCancelled) return;
}

私が抱えている問題は、これが常に機能するとは限らないということです。Webをロードする場合もあれば、Webの一部(ヘッダー、テキストの一部など)をロードする場合もあれば、何もロードしない場合もあります。

これに対する他の解決策はありますか?正しく動作するブラウザのオープンソース実装はありますか?

4

2 に答える 2

12

Apple ドキュメントから:

NSURLErrorCancelled (-999)

「非同期読み込みがキャンセルされたときに返されます。Web Kit フレームワーク デリゲートは、読み込み中のリソースでキャンセル操作を実行すると、このエラーを受け取ります。ダウンロードがキャンセルされた場合、NSURLConnection または NSURLDownload デリゲートはこのエラーを受け取りません。」

したがって、これが発生する最も可能性の高いケースは、最初のリクエストが完了する前に、リクエストをロードしてから別のリクエスト (または同じリクエスト) をロードすることです。これが発生する可能性があります。たとえば、そのようなメソッドでloadRequest(または) を呼び出すと、複数回呼び出すことができます。これは、 で 2 つのリンクをすばやくタップした場合にも発生することが報告されています。loadHTMLStringviewDidAppear:UIWebView

したがって、一般的な提案は、loadRequest(またはloadHTMLString) を呼び出す方法と場所を確認し、場合によってはコードを提供することです。

これをトラブルシューティングするには、次のトレースを Web ビュー デリゲートに追加することをお勧めします。

- (void)webViewDidStartLoad:(UIWebView *)webView {
      NSLog(@"Starting to download request: %@", [webView.request.URL absoluteString]);
}

- (void)webViewDidFinishLoad:(UIWebView *)webView {
      NSLog(@"Finished downloading request: %@", [webView.request.URL absoluteString]);
}

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {

    if ([error code] == NSURLErrorCancelled)
      NSLog(@"Canceled request: %@", [webView.request.URL absoluteString]);
}

出力を調べると、何が起こっているのかがより明確にわかるはずです。出力を貼り付けていただければ、さらにお手伝いいたします。

于 2012-12-17T21:27:28.673 に答える
2

ほとんどの場合、NSURLConnection または UIWebView を使用する場合、このエラーはタイムアウトが原因です。実際にはコードではなく、接続性である可能性があります。

于 2012-12-23T14:29:59.450 に答える