Question

I have internet connection and can browsing with browser.

Here is my codes to check Reachability with AFNetworking.

- (BOOL)connected {
    return [AFNetworkReachabilityManager sharedManager].reachable;
}

And In ViewDidLoad

BOOL isOnline = [self connected];

    if(isOnline == YES)
    {
        NSLog(@"YES");
    }

    else
    {
        NSLog(@"NO");
    }

It's only showing NO and i don't know why is it?

Is there easiest way to check Reachability with AFNetworking?

Était-ce utile?

La solution

I guess startMonitoring isn't called, try to do the below:

- (void)viewDidLoad {
     [super viewDidLoad];
      ....
     [[AFNetworkReachabilityManager sharedManager] startMonitoring];   
}

Autres conseils

If above answer is not solving your issue, then your problem might be due to calling [AFNetworkReachabilityManager sharedManager].reachable while it is in the middle of 'startMonitoring' process where it would always return NO.

I had the same issue. I was calling web service while AFNetworkReachabilityManager had not finished monitoring process and was returning reachable = NO although I had working internet connection.

- (void) callWebService {
    NSLog(@"Calling Webservice...");

    if ([AFNetworkReachabilityManager sharedManager].reachable == NO) {
        NSLog(@"%@", kErrorNoInternet);
        return;
    }

    // Now, proceed to call webservice....
}

So, to solve this I did a trick. Called web service after some delay (in this example 0.05 sec).

Before:

[self callWebService];

Output:enter image description here

After:

[self performSelector:@selector(callWebService) withObject:nil afterDelay:0.3]; // you can set delay value as per your choice

Output:

enter image description here

You can see from the output, the time difference is hardly 0.05 sec (exact value 0.048 sec).

Hope this will help.

instead of waiting you can use blocks just to make sure that your web service will be only called when network is available.

[[AFNetworkReachabilityManager sharedManager]startMonitoring];

[[AFNetworkReachabilityManager sharedManager]setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status)
{
    if (status == AFNetworkReachabilityStatusReachableViaWWAN || status == AFNetworkReachabilityStatusReachableViaWiFi) 
{

        // connected. you can call your web service here

    }else
{
        // internet disconnected
    }
}];
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top