AFNetworking Reachability 首次无法识别互联网连接

Posted

技术标签:

【中文标题】AFNetworking Reachability 首次无法识别互联网连接【英文标题】:AFNetworking Reachability not recognizing internet connection for first time 【发布时间】:2015-11-17 08:12:13 【问题描述】:

我在这个应用程序的少数视图中使用AFNetworking Reachability。一方面,有一个奇怪的问题。在每个视图中,我已经开始在loadView:[[AFNetworkReachabilityManager sharedManager] startMonitoring] 中进行监控,并在viewDidLoad:if([AFNetworkReachabilityManager sharedManager].isReachable) 中调用isReachable。

每次都返回 NO,就像没有互联网连接一样,我很确定我有稳定的无线连接(在其他视图中工作)。

【问题讨论】:

【参考方案1】:

在 AFNetworking 框架中,startMonitoring 方法在 Background global queue 中运行。

在您的情况下,ViewDidLoad 方法在 startMonitoring 方法完成之前被调用,因为它在不同的队列中运行。

所以改为检查isReachable 标志使用reachabilityStatusChangeBlock,如下所示

[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) 

    switch (status) 
        case AFNetworkReachabilityStatusNotReachable:
            break;
        case AFNetworkReachabilityStatusReachableViaWiFi:
            break;
        case AFNetworkReachabilityStatusReachableViaWWAN:
            break;
        default:
            NSLog(@"Unkown network status");

    

];
[[AFNetworkReachabilityManager sharedManager] startMonitoring];

【讨论】:

在rootViewController的情况下如何实现这个,我只需要检查是否有连接? 你可以把这段代码放在RootViewController的ViewDidLoad方法中。如果调用了 AFNetworkReachabilityStatusNotReachable 或默认情况,则没有网络连接。但在 AppDelegate 中实现这一点将是一种理想的方式。【参考方案2】:

[AFNetworkReachabilityManager sharedManager] 是一个单例,当你第一次调用它时它会被初始化,它会在应用程序运行时保持运行。

还需要一些时间来检查以太网/wifi isReachable

所以你可以把这段代码:

[[AFNetworkReachabilityManager sharedManager] startMonitoring];

发送至AppDelegate,并在需要时检查以太网连接。

【讨论】:

以上是关于AFNetworking Reachability 首次无法识别互联网连接的主要内容,如果未能解决你的问题,请参考以下文章

使用 AFNetworking 2 和可达性没有互联网连接警报

IOS的网络环境判断

GitHub上值得关注的iOS开源项目

IOS 开发 网络详解AFNetworking总结

源码分析之AFNetworking ①AFURLSessionManager与AFHTTPSessionManager

源码分析之AFNetworking ①AFURLSessionManager与AFHTTPSessionManager