web-dev-qa-db-ja.com

AFNetworkingおよびインターネット接続なしのシナリオ

私はすべてのリクエスト(ログイン、URLからのデータの取得など)のためにアプリでAFNetworkingを使用しています。

たとえば、ユーザーがログインボタンをクリックして接続がない場合、エラーを示すUIAlertViewを即座に表示するにはどうすればよいですか。 only方法は、リクエストのタイムアウトを待機してfailureブロックを実行することですか?接続があるかどうかを即座にチェックする方法はありませんか?

ありがとう!

23
Fred Collins

0.9以降、AFHTTPClientには実際にネットワーク到達可能性が組み込まれています(Appleの前述の到達可能性コードへのより簡単なインターフェース)。 SystemConfigurationフレームワークを含め、-setReachabilityStatusChangeBlock:を使用して、到達可能性の状態が変化したときの応答を指定します。

57
mattt

AFNetworkingを使用すると、AFNetworingクラスを追加した後、setReachabilityStatusChangeBlock:を利用するためにこれらの手順を実行する必要があります-

  1. プロジェクトにSystemConfiguration.frameworkを追加します
  2. Pchファイルに#import <SystemConfiguration/SystemConfiguration.h>を追加します
  3. このサブクラスにAFHTTPClientのサブクラスがあると仮定して、init関数のコード行の下に追加します-
 [self setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status){
 NSLog(@ "changed%d"、status); 
 //コードはこちら
; 
28
Yogesh Agarwal

AFNetworkingOperationDidFinishNotificationを使用します。 httpリクエストが失敗するたびに、アラートがポップアップしてユーザーに通知します

- (void)addNetworkObserver
{
   [[NSNotificationCenter defaultCenter] addObserver:self
                                            selector:@selector(HTTPOperationDidFinish:) 
                                                name:AFNetworkingOperationDidFinishNotification 
                                              object:nil];
}

- (void)HTTPOperationDidFinish:(NSNotification *)notification 
{
   AFHTTPRequestOperation *operation = (AFHTTPRequestOperation *)[notification object];
   if (![operation isKindOfClass:[AFHTTPRequestOperation class]]) {
       return;
   }
   if (operation.error) {
       UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Connection error"
                                                       message:@"Missing connection to the internet"
                                                      delegate:nil
                                             cancelButtonTitle:@"OK"
                                             otherButtonTitles:nil];

       [alert show];
   }
}
2
carmen_munich

おそらく、「到達可能性」を使用して、デバイスがネットワークに接続されているかどうかを判断できます。 Apple Doc。: Reachability へのリンクです。

例えば ​​:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNetworkChange:) name:kReachabilityChangedNotification object:nil];
reachability = [Reachability reachabilityForInternetConnection];
[reachability startNotifier];
NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus];
if(remoteHostStatus == NotReachable) {
  //Your UIAlertView
}
2
bs7

Reachability? を使用するのはどうですか?

接続を行う前に、接続を試みる正当な理由があるかどうかを確認できます。

到達可能性のためのAppleサンプルプロジェクト が初期ステータスを取得する方法を示しているように見えます。

0
Adam Eberbach