AFNetworking可达性返回FALSE值?

时间:2014-02-23 07:23:23

标签: ios7 reachability afnetworking-2

我有互联网连接,可以浏览浏览器。

以下是我使用Reachability检查AFNetworking的代码。

- (BOOL)connected {
    return [AFNetworkReachabilityManager sharedManager].reachable;
}

在ViewDidLoad中

BOOL isOnline = [self connected];

    if(isOnline == YES)
    {
        NSLog(@"YES");
    }

    else
    {
        NSLog(@"NO");
    }

它只显示NO,我不知道为什么会这样?

是否有最简单的方法可以使用Reachability检查AFNetworking

3 个答案:

答案 0 :(得分:17)

我猜startMonitoring未被调用,请尝试执行以下操作:

- (void)viewDidLoad {
     [super viewDidLoad];
      ....
     [[AFNetworkReachabilityManager sharedManager] startMonitoring];   
}

答案 1 :(得分:1)

如果above answer无法解决您的问题, 那么您的问题可能是由于在“[AFNetworkReachabilityManager sharedManager].reachable”流程中调用startMonitoring,而且始终会返回NO

我有同样的问题。我在调用Web服务时AFNetworkReachabilityManager尚未完成监控过程并返回reachable = NO,尽管我有互联网连接。

- (void) callWebService {
    NSLog(@"Calling Webservice...");

    if ([AFNetworkReachabilityManager sharedManager].reachable == NO) {
        NSLog(@"%@", kErrorNoInternet);
        return;
    }

    // Now, proceed to call webservice....
}

所以,为了解决这个问题,我做了一个技巧。在一段延迟后调用Web服务(在此示例中为0.05秒)。

<强>之前:

[self callWebService];

<强>输出: enter image description here

<强>后:

[self performSelector:@selector(callWebService) withObject:nil afterDelay:0.3]; // you can set delay value as per your choice

<强>输出:

enter image description here

从输出中可以看出,时差几乎不是 0.05秒(精确值0.048秒)。

希望这会有所帮助。

答案 2 :(得分:0)

而不是等待您可以使用块只是为了确保只在网络可用时才调用您的Web服务。

[[AFNetworkReachabilityManager sharedManager]startMonitoring];

[[AFNetworkReachabilityManager sharedManager]setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status)
{
    if (status == AFNetworkReachabilityStatusReachableViaWWAN || status == AFNetworkReachabilityStatusReachableViaWiFi) 
{

        // connected. you can call your web service here

    }else
{
        // internet disconnected
    }
}];