Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AFNetworkReachabilityManager says no network

I'm confused due to lack of examples, so I did this in my appDelegate's didFinishLaunching:

[[AFNetworkReachabilityManager sharedManager] startMonitoring];
bool isThere = [[AFNetworkReachabilityManager sharedManager] isReachable];

And that always returns false, in spite of the network being there and working.

Two questions:

1) if I'm not looking for changes in status, do I need startMonitoring?

2) is there anything you need to do before reading isReachable? Do you need to wait?

like image 648
Maury Markowitz Avatar asked Apr 16 '14 17:04

Maury Markowitz


2 Answers

I know it's too late to answer. If anybody looking for this.

Determining network status requires little time. So, calling isReachable right after startMonitoring will always return false.

You can call isReachable inside setReachabilityStatusChangeBlock ;

    [[AFNetworkReachabilityManager sharedManager] startMonitoring];
    [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status){
          NSLog(@"status changed");
         //check for isReachable here
    }];
like image 165
Suryavel TR Avatar answered Feb 22 '23 23:02

Suryavel TR


Hey I am very late to post the answer, but when I saw this question I remembered how long I've spent time to get one working code to check if network is available and finally found this code. Connectivity variable is a Bool which will give momentary network status when accessed, use of this code block in a class will give you real time network status. Its in swift hope someone will find it useful. Thanks

func checkNetworkStatus(completion:@escaping (_ connected:Bool) ->())
{
    let reachability = AFNetworkReachabilityManager.shared()
    reachability.startMonitoring();
    reachability.setReachabilityStatusChange({ (status) -> Void in

        switch(status) {

        case .unknown:
            self.connectivity = false
            completion(false)

        case .notReachable:
            self.connectivity = false
            completion(false)

        case .reachableViaWWAN:
            self.connectivity = true
            completion(true)

        case .reachableViaWiFi:
            self.connectivity = true
            completion(true)
        }
    })
}

This code block can be used in your class as

    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    appDelegate.initNetworkMonitoring { (status) in
        // make necessary UI updates
    }
like image 30
Alex Avatar answered Feb 23 '23 01:02

Alex