- ベストアンサー
xcodeでのReachabilityの使い方
- UIWebViewを基本としたiPhoneアプリの開発に取り組んでいます。ネットワークに接続するアプリの場合、圏外時に操作した場合にアラートを上げる仕様でないとアップルの審査を通らないと聞いています。
- Reachabilityを使用する必要があると理解しているのですが、様々なサイトのサンプルコードを見ても記載先がいまいち曖昧でうまくいきません。「どこに」、「どのコードを記載する」というレベルで示唆いただけませんでしょうか。
- 勘違いしている部分があればご指摘ください。このステップをクリアしないとアップルの審査を通らないと聞いていますので、なにとぞよろしくお願いいたします。(必須機能であればワンクリックで機能付加できればいいのに、と思いました、、)
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
-(void) webView:(UIWebView *)webView didFailLoadWithError:(NSError) error で、エラーが起きた時の処理をやるのですから、この処理書いてなければ、まともな、エラー処理はできないでしょう。 そもそも、アラート表示出していいのか、どんなアラート表示を出したいのかは、App設計者のみ知ることですからか。
その他の回答 (2)
- riding_heart
- ベストアンサー率64% (9/14)
あらためて、UIWebViewのドキュメントを見てみました。 ちなみに、私のAppは、NSURLConnectionを使うものですが、ネットに繋げない場合は、ほとんど即座に、コールバックがかかります。 UIWebViewでは、NSURLRequestまでしかつかわないようですが、UIWebView Delegateの処理は、書いてるでしょうか? ドキュメントを見る限り、 -(void) webView:(UIWebView *)webView didFailLoadWithError:(NSError) error が呼ばれていて、しかるべきだと思いますが。 一般論として 1)ネットがない。GPRS的な手続きで失敗している。この場合、即リターン 2)ネットにつなげている(GPRS的手続きはOK)で、リモートからレスポンスが帰ってこない。この場合は、アクティビティインディケーターがつきっぱなしで、タイムアウトまで待たないと行けないのは、そのとおり。 ということで、同じエラーでも処理が違います。圏外の実験は、簡易、電波暗室箱でも、使っているのでしょうか?
補足
riding_heartさんコメントありがとうございます。 Delegateの処理がしっかりできていれば、特別なコードを書かずともUIWebViewの基本仕様としてエラー表示してくれるはずと解釈すればよろしいでしょうか。 圏外の実験は、iPhoneを機内モード(電波OFFモード)にして試しています。Reachabilityを実装するまでは、機内モードでも、Active Indicatorが回り続け、何のエラーも返してくれませんでした。 おはずかしながら、Delegateの概念もいまいち理解できておらず、そのあたりの処理で失敗している可能性はあると思います。
- riding_heart
- ベストアンサー率64% (9/14)
ネットワークを使うAppを販売しているものですが。 もちろん、ネットワークアクセスする場合に、コネクションできない場合、エラー表示を出すのが自然な局面で、出さないようでは、審査は通らないでしょう。しかし、Reachability.(h|m)を使わないと行けないという事はないです。実際に、UIWebViewのサンプルコードでも、そんなのは使っていないのがあるし、私も使った事無いですから。 そもそも、圏外では、繋ぎに行っても繋がらない(電話をかけれない)のですから、ことさら特殊な事をする必要はなく、単に普通のコネクションエラーの処理を書けば、いいだけだと思いますが。
補足
riding_heartさん、コメントありがとうございます。 Reachability を使わずともコネクションエラーを出せるとのことですが、具体的にはどのようは方法になりますでしょうか。 UIWebViewの場合、電波のない状態ででWebへ接続をかけても、Active Indicatorはぐるぐると回り続けており、特にエラー表示は出ません。もちろんページ遷移もしませんが。 そのような場合にReachabilityを使わずともエラーを出せるのであれば実装方法を簡単に教えていただけると助かります。 どうぞよろしくお願いいたします。 (Reachabilityを使ってのエラー表示はその後実現できたのですが、無駄に複雑だなぁと感じました)
お礼
ありがとうございます。 ご示唆いただいた情報を元に、Reachabilityを用いないエラー処理にトライして見ます。