Created
May 1, 2012 13:59
-
-
Save idStar/2568090 to your computer and use it in GitHub Desktop.
Reachability for iOS5.x with ARC, sample usage using tonymillion fork
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#pragma mark - Reachability | |
/** | |
* This kicks off a check for our website's reachability in the context of needing it to display, or alert the user | |
* of error, just once. That's why we stop the notifier in both reachable and unreachable callback block handlers. | |
* We're not looking for ongoing callbacks through the life of the application; we just want to know the one time. | |
* | |
* This is meant for an iPhone app only, hence, no explicit WWAN setting. | |
* | |
* CREDIT | |
* The iOS5 ARC compatible adjusted Reachability class from Tony Million was used. | |
* See: https://github.com/tonymillion/Reachability | |
* Be sure to see Tony's associated iOS5 ARC Project in this repository. The README didn't call out the | |
* need for dispatch_async back on the main thread, or stopping the notifier, but this can be gleaned | |
* from the embedded sample project. I've put that together in this method, for what I think would be a | |
* common use case. | |
*/ | |
- (void)checkWebsiteReachability { | |
// Allocate a reachability object | |
Reachability *websiteReachability = [Reachability reachabilityWithHostname:kRPWebsite_REPSPRO]; | |
RPSettingsWebsiteViewController *capturedSelf = self; | |
// Set the blocks for both reachable and not-reachable. These callbacks are on background threads, | |
// so we must dispatch_async back on the main thread before continuing with success/failure actions | |
// that impact the UI. | |
websiteReachability.reachableBlock = ^(Reachability *reachability) { | |
dispatch_async(dispatch_get_main_queue(), ^{ | |
NSLog(@"Website was reachable. So loading it now."); | |
[capturedSelf loadWebsite]; | |
}); | |
[reachability stopNotifier]; // Don't need it anymore, so stop it from alerting us ongoing. | |
}; | |
websiteReachability.unreachableBlock = ^(Reachability *reachability) { | |
dispatch_async(dispatch_get_main_queue(), ^{ | |
NSLog(@"Website was NOT reachable. Alerting user of this, now."); | |
[capturedSelf presentSimpleAlertWithTitle:@"REPS Pro Website" | |
andMessage:@"The website cannot be loaded at this time, as a reliable " | |
"Internet connection couldn't be established."]; | |
}); | |
[reachability stopNotifier]; // Don't need it anymore, so stop it from alerting us ongoing. | |
}; | |
// Start the notifier which will cause the reachability object to retain itself. | |
// This is the only way to get it to start checking network reachability. | |
[websiteReachability startNotifier]; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment