在使用Reachability判断网络状态时,我们可以下载苹果官网的Reachability.zip文件,解压之后有一个不错的实例供我们参考。
1、下载 http://developer.apple.com/library/ios/samplecode/Reachability/Reachability.zip
复制里面的 Reachability.h 和 Reachability.m 到项目中
2、添加 framework:
将 SystemConfiguration.framework 添加进工程。
在这里描述一下示例中的代码
下面的代码设置UITextField的值以及显示的图片。
- (void) configureTextField: (UITextField*) textField imageView: (UIImageView*) imageView reachability: (Reachability*) curReach { NetworkStatus netStatus = [curReach currentReachabilityStatus]; BOOL connectionRequired= [curReach connectionRequired]; NSString* statusString= @""; switch (netStatus) { case NotReachable: { statusString = @"Access Not Available"; imageView.image = [UIImage imageNamed: @"stop-32.png"] ; //Minor interface detail- connectionRequired may return yes, even when the host is unreachable. We cover that up here... connectionRequired= NO; break; } case ReachableViaWWAN: { statusString = @"Reachable WWAN"; imageView.image = [UIImage imageNamed: @"WWAN5.png"]; break; } case ReachableViaWiFi: { statusString= @"Reachable WiFi"; imageView.image = [UIImage imageNamed: @"Airport.png"]; break; } } if(connectionRequired) { statusString= [NSString stringWithFormat: @"%@, Connection Required", statusString]; } textField.text= statusString; }
- (void) updateInterfaceWithReachability: (Reachability*) curReach { if(curReach == hostReach) { [self configureTextField: remoteHostStatusField imageView: remoteHostIcon reachability: curReach]; NetworkStatus netStatus = [curReach currentReachabilityStatus]; BOOL connectionRequired= [curReach connectionRequired]; summaryLabel.hidden = (netStatus != ReachableViaWWAN); NSString* baseLabel= @""; if(connectionRequired) { baseLabel= @"Cellular data network is available.\n Internet traffic will be routed through it after a connection is established."; } else { baseLabel= @"Cellular data network is active.\n Internet traffic will be routed through it."; } summaryLabel.text= baseLabel; } if(curReach == internetReach) { [self configureTextField: internetConnectionStatusField imageView: internetConnectionIcon reachability: curReach]; } if(curReach == wifiReach) { [self configureTextField: localWiFiConnectionStatusField imageView: localWiFiConnectionIcon reachability: curReach]; } }当网络状态发生变化时会更改状态,以及UITextField,图片的显示。
- (void) reachabilityChanged: (NSNotification* )note { Reachability* curReach = [note object]; NSParameterAssert([curReach isKindOfClass: [Reachability class]]); [self updateInterfaceWithReachability: curReach]; }
- (void) applicationDidFinishLaunching: (UIApplication* )application { #pragma unused(application) contentView.backgroundColor = [UIColor groupTableViewBackgroundColor]; summaryLabel.hidden = YES; // Observe the kNetworkReachabilityChangedNotification. When that notification is posted, the // method "reachabilityChanged" will be called. [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(reachabilityChanged:) name: kReachabilityChangedNotification object: nil]; //Change the host name here to change the server your monitoring remoteHostLabel.text = [NSString stringWithFormat: @"Remote Host: %@", @"www.hopean.com"]; hostReach = [[Reachability reachabilityWithHostName: @"www.hopesn.com"] retain]; [hostReach startNotifier]; [self updateInterfaceWithReachability: hostReach]; internetReach = [[Reachability reachabilityForInternetConnection] retain]; [internetReach startNotifier]; [self updateInterfaceWithReachability: internetReach]; wifiReach = [[Reachability reachabilityForLocalWiFi] retain]; [wifiReach startNotifier]; [self updateInterfaceWithReachability: wifiReach]; [window makeKeyAndVisible]; }