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 中尽快检查可达性

[AFN]AFNetworking错误总结

Swift 中的 AFNetworking 可达性管理器

IOS AFN (第三方请求)

AFNetworking 2.0:isReachable 总是返回 False

AFN3.0封装