私はすべてのリクエスト(ログイン、URLからのデータの取得など)のためにアプリでAFNetworking
を使用しています。
たとえば、ユーザーがログインボタンをクリックして接続がない場合、エラーを示すUIAlertView
を即座に表示するにはどうすればよいですか。 only方法は、リクエストのタイムアウトを待機してfailure
ブロックを実行することですか?接続があるかどうかを即座にチェックする方法はありませんか?
ありがとう!
0.9以降、AFHTTPClient
には実際にネットワーク到達可能性が組み込まれています(Appleの前述の到達可能性コードへのより簡単なインターフェース)。 SystemConfiguration
フレームワークを含め、-setReachabilityStatusChangeBlock:
を使用して、到達可能性の状態が変化したときの応答を指定します。
AFNetworking
を使用すると、AFNetworingクラスを追加した後、setReachabilityStatusChangeBlock:
を利用するためにこれらの手順を実行する必要があります-
SystemConfiguration.framework
を追加します#import <SystemConfiguration/SystemConfiguration.h>
を追加しますAFHTTPClient
のサブクラスがあると仮定して、init関数のコード行の下に追加します-[self setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status){ NSLog(@ "changed%d"、status); //コードはこちら ;
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];
}
}
おそらく、「到達可能性」を使用して、デバイスがネットワークに接続されているかどうかを判断できます。 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
}
Reachability? を使用するのはどうですか?
接続を行う前に、接続を試みる正当な理由があるかどうかを確認できます。
到達可能性のためのAppleサンプルプロジェクト が初期ステータスを取得する方法を示しているように見えます。