The main problem here is a typo in your code; the line reading hostReachability = [Reachability reachabilityForInternetConnection];
in LoginViewController.m should be internetReachability = [Reachability reachabilityForInternetConnection];
. The way it currently is, you never instantiate internetReachability
, and then I guess [internetReachability currentReachabilityStatus]
will always return nil
.
Below is a basic example you can test with:
@interface LoginViewController ()
// ...
@property (strong, nonatomic) Reachability *hostReachability;
@property (strong, nonatomic) Reachability *internetReachability;
@property (strong, nonatomic) Reachability *wifiReachability;
@end
@implementation LoginViewController
// ...
- (void)setupReachabilityMonitoring
{
[NSNotificationCenter.defaultCenter addObserver:self
selector:@selector(reachabilityChanged:)
name:kReachabilityChangedNotification
object:nil];
_hostReachability = [Reachability reachabilityWithHostName:@"8.8.8.8"];
[_hostReachability startNotifier];
_internetReachability = [Reachability reachabilityForInternetConnection];
[_internetReachability startNotifier];
_wifiReachability = [Reachability reachabilityForLocalWiFi];
[_wifiReachability startNotifier];
[self logReachabilityStatus];
}
- (void)reachabilityChanged:(NSNotification *)notification
{
if ([notification.object isKindOfClass:Reachability.class]) {
[self logReachabilityStatus];
}
}
- (void)logReachabilityStatus
{
NSString *hostStatus = _hostReachability.currentReachabilityStatus ? @"up" : @"down";
NSString *internetStatus = _internetReachability.currentReachabilityStatus ? @"up" : @"down";
NSString *wifiStatus = _wifiReachability.currentReachabilityStatus ? @"up" : @"down";
NSLog(@"Internet is %@, wifi is %@, host is %@", internetStatus, wifiStatus, hostStatus);
}
@end