UIWebViewの使用上の簡単な注意
UIWebViewを使用する上での簡単な注意点をいくつか。
UIWebViewオブジェクトはリリース前にdelegateにnilを設定しておくこと
リリース前にdelegateにnilを設定しておく必要があるのは、次のページで詳細に説明されているように、UIWebViewのロード処理が別スレッドで行われていることが関係しているためであるようだ。
[iPhone] UIWebView のリリース前に delegate に nil をセットする必要がある | Sun Limited Mt.
「iPhoneプログラミングUIKit詳解リファレンス」ではさらに、リリース直前にロード処理を中止している。
- (void)dealloc { if (webView.loading) { [webView stopLoading]; } webView.delegate = nil; [webView release]; }
- 作者: 所友太,京セラコミュニケーションシステム株式会社
- 出版社/メーカー: リックテレコム
- 発売日: 2010/01/12
- メディア: 単行本
- 購入: 25人 クリック: 329回
- この商品を含むブログ (42件) を見る
webView:didFailLoadWithError:呼び出し時の処理について
webView:didFailLoadWithError:がコールされたときに、エラー情報をAlertViewで表示しようとすると、第2引数から取得できるエラードメインがNSURLErrorDomain、エラーコードが-999である場合があることに気がつく。これは最初のリクエストが処理中のときに次のリクエストが発生した場合に起こる。エラーコードの-999はNSError.hで定義されているNSURLErrorCanceledのことである。NSURLErrorCanceledという名前からも推測できるように、このエラーコードはそれ以前に発行されたリクエストがキャンセルされたことを示す。
たいていの場合には、後続のリクエストが正常に処理されれば問題ないため、NSURLErrorCanceledのエラーはAlertViewで表示する必要はない。そのため、エラー情報をAlertViewで表示する場合には、NSURLErrorCanceledを除外して次のようにするのがよい。
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { if ([error code] != NSURLErrorCancelled) { NSString *message = [error localizedDescription]; UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"エラー発生" message:message delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil]; [alert show]; [alert release]; } }