AFNetworking和无Internet连接方案

时间:2012-02-12 22:55:54

标签: iphone ios cocoa-touch afnetworking

我在我的应用中为每个请求使用AFNetworking(例如登录,从网址获取数据等)。

以此为例:用户单击登录按钮并且没有连接,如何立即显示出错误的UIAlertView only 方式是等待请求超时并执行failure块?有没有办法立即检查是否有连接?

谢谢!

5 个答案:

答案 0 :(得分:57)

从0.9开始,AFHTTPClient实际上内置了网络可达性(与Apple上述Reachability代码的简单接口)。只需包含SystemConfiguration框架并使用-setReachabilityStatusChangeBlock:指定可达性状态更改时的响应。

答案 1 :(得分:28)

使用AFNetworking这些是在添加AFNetworing类后利用setReachabilityStatusChangeBlock:必须遵循的步骤 -

  1. SystemConfiguration.framework添加到您的项目
  2. 在pch文件中添加#import <SystemConfiguration/SystemConfiguration.h>
  3. 假设您在此子类中有一个AFHTTPClient的子类,请在init函数中添加以下代码行 -
  4. [self setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
            NSLog(@"changed %d", status);
            //your code here
        }];
    

答案 2 :(得分:2)

也许您可以使用“Reachability”来确定设备是否已连接到网络。 这是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
}

答案 3 :(得分:2)

我使用 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];
   }
}

答案 4 :(得分:0)

如何使用Reachability?

您可以在执行此操作之前检查是否有合理的理由尝试连接。

看起来Apple Sample Project for Reachability显示了如何获得初始状态。