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 和可达性没有互联网连接警报