こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

xcodeでのReachabilityの使い方

お世話になります。
UIWebViewを基本としたiPhoneアプリの開発に取り組んでいます。

基本機能は完成しているのですが、ネットワークに接続するアプリの場合、圏外時に操作した場合にアラートを上げる仕様でないとアップルの審査を通らないと聞いています。

その際、Reachabilityを使用する必要があると理解しているのですが、様々なサイトのサンプルコードを見ても記載先がいまいち曖昧でうまくいきません。(コードを理解できていないのでそもそもなのですが)

「どこに」、「どのコードを記載する」というレベルで示唆いただけませんでしょうか。

※Reachability.hとReachability.mおよびSystemConfigration.frameworkは導入済みです。
※xcodeのバージョンは4.6です。
※基本的な構成ファイル名は下記の通りです。
1.AppDelegate.h
2.AppDelegate.m
3.MainStoryboard.storyboard
4.ViewController.h
5.ViewController.m
6.Reachability.h
7.Reachability.m

勘違いしている部分があればご指摘ください。
このステップをクリアしないとアップルの審査を通らないと聞いていますので、なにとぞよろしくお願いいたします。(必須機能であればワンクリックで機能付加できればいいのに、と思いました、、)

投稿日時 - 2013-02-24 02:35:02

QNo.7961438

すぐに回答ほしいです

質問者が選んだベストアンサー

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

で、エラーが起きた時の処理をやるのですから、この処理書いてなければ、まともな、エラー処理はできないでしょう。

 そもそも、アラート表示出していいのか、どんなアラート表示を出したいのかは、App設計者のみ知ることですからか。

投稿日時 - 2013-02-27 09:54:39

お礼

ありがとうございます。

ご示唆いただいた情報を元に、Reachabilityを用いないエラー処理にトライして見ます。

投稿日時 - 2013-02-28 22:36:13

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

あらためて、UIWebViewのドキュメントを見てみました。
ちなみに、私のAppは、NSURLConnectionを使うものですが、ネットに繋げない場合は、ほとんど即座に、コールバックがかかります。

 UIWebViewでは、NSURLRequestまでしかつかわないようですが、UIWebView Delegateの処理は、書いてるでしょうか?
 ドキュメントを見る限り、

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

が呼ばれていて、しかるべきだと思いますが。

 一般論として
1)ネットがない。GPRS的な手続きで失敗している。この場合、即リターン
2)ネットにつなげている(GPRS的手続きはOK)で、リモートからレスポンスが帰ってこない。この場合は、アクティビティインディケーターがつきっぱなしで、タイムアウトまで待たないと行けないのは、そのとおり。

 ということで、同じエラーでも処理が違います。圏外の実験は、簡易、電波暗室箱でも、使っているのでしょうか?

投稿日時 - 2013-02-26 10:29:46

補足

riding_heartさんコメントありがとうございます。

Delegateの処理がしっかりできていれば、特別なコードを書かずともUIWebViewの基本仕様としてエラー表示してくれるはずと解釈すればよろしいでしょうか。

圏外の実験は、iPhoneを機内モード(電波OFFモード)にして試しています。Reachabilityを実装するまでは、機内モードでも、Active Indicatorが回り続け、何のエラーも返してくれませんでした。

おはずかしながら、Delegateの概念もいまいち理解できておらず、そのあたりの処理で失敗している可能性はあると思います。

投稿日時 - 2013-02-27 02:18:24

ANo.1

ネットワークを使うAppを販売しているものですが。

もちろん、ネットワークアクセスする場合に、コネクションできない場合、エラー表示を出すのが自然な局面で、出さないようでは、審査は通らないでしょう。しかし、Reachability.(h|m)を使わないと行けないという事はないです。実際に、UIWebViewのサンプルコードでも、そんなのは使っていないのがあるし、私も使った事無いですから。

 そもそも、圏外では、繋ぎに行っても繋がらない(電話をかけれない)のですから、ことさら特殊な事をする必要はなく、単に普通のコネクションエラーの処理を書けば、いいだけだと思いますが。

投稿日時 - 2013-02-24 18:47:39

補足

riding_heartさん、コメントありがとうございます。

Reachability を使わずともコネクションエラーを出せるとのことですが、具体的にはどのようは方法になりますでしょうか。

UIWebViewの場合、電波のない状態ででWebへ接続をかけても、Active Indicatorはぐるぐると回り続けており、特にエラー表示は出ません。もちろんページ遷移もしませんが。

そのような場合にReachabilityを使わずともエラーを出せるのであれば実装方法を簡単に教えていただけると助かります。

どうぞよろしくお願いいたします。

(Reachabilityを使ってのエラー表示はその後実現できたのですが、無駄に複雑だなぁと感じました)

投稿日時 - 2013-02-25 18:16:16

あなたにオススメの質問