Need some help with Reachability (2.0.3ddg)
iphone, objective-c, reachability
Solution
OK, so after trying a few things out myself, I actually got it to work, by adding one extra line of code:
-(void)setupReachability {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotificationV2 object:nil];
hostReach = [[ReachabilityV2 reachabilityWithHostName:@"www.google.com"] retain];
[hostReach connectionRequired]; // this line was added, and apparently forces a connection requirement..
[hostReach startNotifier];
}
Problem
When my app launches, I check for reachability because I need an immediate internet connection. My problem, though, is that it appears there's no immediate confirmation for the `NetworkStatus`, which means right after the Reachability is setup, I check whether there's a connection, and it returns that there isn't, regardless of whether I am in fact on WiFi/3G, or have turned the radio off. I can confirm that I am in fact getting an Internet connection, because instantly after applicationDidFinishLaunching, there's a notification which then logs "ReachableViaWiFi".. What am I doing wrong? Why is it not confirming a valid Internet connection right away? ``` - (void)applicationDidFinishLaunching:(UIApplication *)application { NetworkStatus netStatus = [hostReach currentReachabilityStatus]; if (netStatus == NotReachable) { ErrorViewController *errorViewController = [[ErrorViewController alloc] initWithNibName:@"ErrorView" bundle:[NSBundle mainBundle]]; [tabBarController.view removeFromSuperview]; [window addSubview:[errorViewController view]]; return; } } -(void)setupReachability { [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(reachabilityChanged:) name:kReachabilityChangedNotification object: nil]; hostReach = [[Reachability reachabilityWithHostName:@"www.google.com"] retain]; [hostReach startNotifier]; } -(void)reachabilityChanged:(NSNotification *)notification { Reachability* curReach = [notification object]; NSParameterAssert([curReach isKindOfClass: [Reachability class]]); NetworkStatus netStatus = [curReach currentReachabilityStatus]; BOOL connectionRequired = [curReach connectionRequired]; switch (netStatus) { case NotReachable: { [[NSUserDefaults standardUserDefaults] setInteger:kNOTREACHABLE forKey:kREACHABILITYSTATUS]; NSLog(@"NotReachable"); connectionRequired = NO; break; } case ReachableViaWWAN: { [[NSUserDefaults standardUserDefaults] setInteger:kREACHABLEVIAWWAN forKey:kREACHABILITYSTATUS]; NSLog(@"ReachableViaWWAN"); break; } case ReachableViaWiFi: { [[NSUserDefaults standardUserDefaults] setInteger:kNOTREACHABLE forKey:kREACHABILITYSTATUS]; NSLog(@"ReachableViaWiFi"); break; } } } ```