AFNetworking 2.0:isReachable 总是返回 False

Posted

技术标签:

【中文标题】AFNetworking 2.0:isReachable 总是返回 False【英文标题】:AFNetworking 2.0 : isReachable always returns False 【发布时间】:2014-07-04 10:16:14 【问题描述】:

我在我的应用程序中使用 AFNetworking 2.0 进行可达性检查。但是,可达属性总是返回 false。请看代码

[[AFNetworkReachabilityManager sharedManager] startMonitoring];

 _isInternetReachable = [AFNetworkReachabilityManager sharedManager].reachable ;

 [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) 
        NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status));

        if (status)
            _isInternetReachable = YES;
        else
            _isInternetReachable = NO;

  ];

当我在第二行之后检查 _isInternetReachable 时,它​​总是返回 false。但是一旦我的应用程序启动,它就会进入状态更改块并将 _isInternetReachable 设置为 Yes。 我无法弄清楚这种行为。我正在模拟器上对此进行测试。请帮忙。谢谢

【问题讨论】:

【参考方案1】:

请尝试使用以下代码。

监控代码

self.manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:@"http://www.google.com"]];

self.manager.responseSerializer = [AFJSONResponseSerializer serializer];

__block ViewController *blocksafeSelf = self;

    NSOperationQueue *operationQueue = self.manager.operationQueue;

    [self.manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) 

//        NSLog(@"stats: %d", self.manager.reachabilityManager.isReachable);
        [blocksafeSelf finish];

        switch (status) 
            case AFNetworkReachabilityStatusNotReachable:
                // we need to notify a delegete when internet conexion is lost.
                // [delegate internetConexionLost];
                NSLog(@"No Internet Conexion");
                break;
            case AFNetworkReachabilityStatusReachableViaWiFi:
                NSLog(@"WIFI");
                break;
            case AFNetworkReachabilityStatusReachableViaWWAN:
                NSLog(@"3G");
                break;
            default:
                NSLog(@"Unkown network status");
                [operationQueue setSuspended:YES];
                break;
        
    ];// Do any additional setup after loading the view, typically from a nib.
    [self.manager.reachabilityManager startMonitoring];

回调方法:

-(void)finish



NSLog(@"---:%d", self.manager.reachabilityManager.isReachable);


【讨论】:

以上是关于AFNetworking 2.0:isReachable 总是返回 False的主要内容,如果未能解决你的问题,请参考以下文章

AFNetworking 2.0 对现有项目的更新

AfNetworking 2.0 发布问题

如何在旧的 AFNetworking 中使用 AFNetworking 2.0+?

Afnetworking 2.0 发布方法错误

AFNetworking 2.0 和请求标头

Afnetworking 2.0 参数编码