我有互联网连接,可以浏览浏览器。
以下是我使用Reachability
检查AFNetworking
的代码。
- (BOOL)connected {
return [AFNetworkReachabilityManager sharedManager].reachable;
}
在ViewDidLoad中
BOOL isOnline = [self connected];
if(isOnline == YES)
{
NSLog(@"YES");
}
else
{
NSLog(@"NO");
}
它只显示NO
,我不知道为什么会这样?
是否有最简单的方法可以使用Reachability
检查AFNetworking
?
答案 0 :(得分:17)
我猜startMonitoring
未被调用,请尝试执行以下操作:
- (void)viewDidLoad {
[super viewDidLoad];
....
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
}
答案 1 :(得分:1)
如果above answer无法解决您的问题,
那么您的问题可能是由于在“[AFNetworkReachabilityManager sharedManager].reachable
”流程中调用startMonitoring
,而且始终会返回NO
。
我有同样的问题。我在调用Web服务时AFNetworkReachabilityManager
尚未完成监控过程并返回reachable = NO
,尽管我有互联网连接。
- (void) callWebService {
NSLog(@"Calling Webservice...");
if ([AFNetworkReachabilityManager sharedManager].reachable == NO) {
NSLog(@"%@", kErrorNoInternet);
return;
}
// Now, proceed to call webservice....
}
所以,为了解决这个问题,我做了一个技巧。在一段延迟后调用Web服务(在此示例中为0.05秒)。
<强>之前:强>
[self callWebService];
<强>后:强>
[self performSelector:@selector(callWebService) withObject:nil afterDelay:0.3]; // you can set delay value as per your choice
<强>输出:强>
从输出中可以看出,时差几乎不是 0.05秒(精确值0.048秒)。
希望这会有所帮助。
答案 2 :(得分:0)
而不是等待您可以使用块只是为了确保只在网络可用时才调用您的Web服务。
[[AFNetworkReachabilityManager sharedManager]startMonitoring];
[[AFNetworkReachabilityManager sharedManager]setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status)
{
if (status == AFNetworkReachabilityStatusReachableViaWWAN || status == AFNetworkReachabilityStatusReachableViaWiFi)
{
// connected. you can call your web service here
}else
{
// internet disconnected
}
}];