I have implemented Apple's Reachability 2.2 class in a new iOS 4.2 project. I simply want an alert view to appear when the device loses network connectivity. ( And thence comply with the interface usability requirement for the App Store. ) I used this previous SO question as my starting point. The app seems to be notifying correctly ( when connectivity is interrupted or restored) , but I get looping with my NS Alert views. I think my error must be somewhat basic, but I cannot catch it. If there is a cleaner way to do this without NS AlertView I am open to that as well. I left some the methods out of the code below, but the app is pretty straightforward, having only one ViewController.
ViewController.h :
#import <UIKit/UIKit.h>
#import "Reachability.h"
@class Reachability;
@interface ViewController : UIViewController   {
IBOutlet UITextView *liveOutputTextView;
IBOutlet UITextView *textView;
Reachability* internetReachable;
    Reachability* hostReachable;
}
-(IBAction)action1:(id)sender;
-(IBAction)action2:(id)sender;
-(void)textFieldDidUpdate:(id)sender;
-(void)checkNetworkStatus:(NSNotification *)notice;
@end
ViewController.m
#import "ViewController.h"
#import "Reachability.h"
@implementation ViewController
@synthesize liveOutputTextField;
- (void)checkNetworkStatus:(NSNotification *)notice
{
// called after network status changes
NetworkStatus internetStatus = [internetReachable currentReachabilityStatus];
switch (internetStatus)
case NotReachable:
    {
        NSLog(@"The internet is inaccessible.");
        UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Internet inaccessible."
                                                         message:@"Internet inaccessible."
                                                        delegate:self
                                               cancelButtonTitle:@"Ok"  
       otherButtonTitles:nil];
        [alert show];
        [alert release];
        break;
    }
    case ReachableViaWiFi:
    {
        NSLog(@"Internet Connetion is UP.");
        UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Internet is Up"
                                                         message:@"Internet Up"
                                                        delegate:self
                                               cancelButtonTitle:@"Ok"
                                               otherButtonTitles:nil];
        [alert show];
        [alert release];
        break;
    }
    case ReachableViaWWAN:
    {
        NSLog(@"The internet is working via WWAN.");
        break;
    }
}
NetworkStatus hostStatus = [hostReachable currentReachabilityStatus];
switch (hostStatus)
{
    case NotReachable:
    {
        NSLog(@"A gateway to the host server is down.");
        UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Host is Down"
                                                         message:@"Host Down"
                                                        delegate:self
                                               cancelButtonTitle:@"Ok"
                                               otherButtonTitles:nil];
        [alert show];
        [alert release];
        break;
    }
    case ReachableViaWiFi:
    {
        NSLog(@"A gateway to the host server is working via WIFI.");
        break;
    }
    case ReachableViaWWAN:
    {
        NSLog(@"A gateway to the host server is working via WWAN.");
        break;
    }
}
}
- (void)viewDidLoad {
// check for internet connection
[[NSNotificationCenter defaultCenter] addObserver:self
                                                       selector:@selector(checkNetworkStatus:)
                                             name:kReachabilityChangedNotification
                                                     object:nil];
internetReachable = [[Reachability reachabilityForInternetConnection] retain ];
[internetReachable startNotifier];
// check if a pathway to a random host exists
hostReachable = [[Reachability reachabilityWithHostName: @"www.apple.com"]retain ];
[hostReachable startNotifier];
// now patiently wait for the notification
}
- (void)viewDidAppear:(BOOL)animated {
// check for internet connection
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkStatus:) name:kReachabilityChangedNotification object:nil];
internetReachable = [[Reachability reachabilityForInternetConnection] retain];
[internetReachable startNotifier];
// check if a pathway to a random host exists
hostReachable = [[Reachability reachabilityWithHostName: @"www.apple.com"] retain];
[hostReachable startNotifier];
// now patiently wait for the notification
}
-(IBAction) action1:(id)sender {
// check for internet connection
[[NSNotificationCenter defaultCenter] addObserver:self
                                          selector:@selector(checkNetworkStatus:)
                                             name:kReachabilityChangedNotification
                                           object:nil];
internetReachable = [[Reachability reachabilityForInternetConnection] retain];
[internetReachable startNotifier];
// check if a pathway to a random host exists
hostReachable = [[Reachability reachabilityWithHostName: @"www.apple.com"] retain];
[hostReachable startNotifier];
// now patiently wait for the notification
//  ** LEFT OUT ACTUAL CODE FOR BREVITY  ** 
}
-(IBAction) action2:(id)sender {
// check for internet connection
[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(checkNetworkStatus:)
                                             name:kReachabilityChangedNotification
                                                object:nil];
internetReachable = [[Reachability reachabilityForInternetConnection] retain];
[internetReachable startNotifier];
// check if a pathway to a random host exists
hostReachable = [[Reachability reachabilityWithHostName: @"www.apple.com"] retain];
[hostReachable startNotifier];
// now patiently wait for the notification
//  ** LEFT OUT ACTUAL CODE FOR BREVITY  ** 
}
 - (void)viewDidUnload {
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
  [[NSNotificationCenter defaultCenter] removeObserver:self];   
}
- (void)dealloc {
[super dealloc];
}
 
     
     
    