AFNetworking - 检查域的可达性
Posted
技术标签:
【中文标题】AFNetworking - 检查域的可达性【英文标题】:AFNetworking - Check reachability for a domain 【发布时间】:2014-05-07 18:46:25 【问题描述】:我正在使用 AFNetworking 2.2.1 并尝试使用 AFNetworkReachabilityManager 检查某个域是否可访问,但它总是返回 NO。也许我没有正确使用它,并希望得到任何指示。
AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager managerForDomain:@"www.google.com"];
// always returns NO:
NSLog([manager isReachable] ? @"YES" : @"NO");
我也尝试了 startMonitoring 方法(在管理器变量声明之后),但没有运气:
[manager startMonitoring];
编辑:正如大卫指出的,需要添加一个状态更改块来获得通知:
AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager managerForDomain:@"www.google.com"];
[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status)
switch (status)
case AFNetworkReachabilityStatusReachableViaWWAN:
case AFNetworkReachabilityStatusReachableViaWiFi:
case AFNetworkReachabilityStatusNotReachable:
NSLog(@"Never called");
break;
default:
NSLog(@"Never called");
break;
];
[manager startMonitoring];
// always returns NO:
NSLog([manager isReachable] ? @"YES" : @"NO");
【问题讨论】:
【参考方案1】:AFReachabilityManager
是异步的,所以isReachable
的结果在完成之前是无效的。当isReachable
的结果有效时得到通知的最简单方法是使用setReachabilityStatusChangeBlock:
设置状态更改块,并在状态不再是AFNetworkReachabilityStatusUnknown
时执行任何适当的操作
【讨论】:
我也用 setReachabilityStatusChangeBlock: 尝试了上面的代码,但该块从未被调用。 您仍然需要调用 startMonitoring。 我用 setReachabilityStatusChangeBlock + startMonitoring 调用更新了原始帖子,但从未调用过该块。 对不起,你是对的。我在 [manager isReachable] 调用之后立即调用了 stopMonitoring 方法...以上是关于AFNetworking - 检查域的可达性的主要内容,如果未能解决你的问题,请参考以下文章
在使用 RESideMenu 显示视图控制器之前,使用 AFNetworking 在 didFinishLaunching 中尽快检查可达性