build立与AFNetworking 2.0的可达性

我正在尝试使用新的2.0 AFNetworking设置可达性。

在我的AppDelegate我初始化sharedManager。

// Instantiate Shared Manager [AFNetworkReachabilityManager sharedManager]; 

然后在相关的VC方法中检查是否isReachable:

 // Double check with logging if ([[AFNetworkReachabilityManager sharedManager] isReachable]) { NSLog(@"IS REACHABILE"); } else { NSLog(@"NOT REACHABLE"); } 

目前这在模拟器中没有像预期的那样工作,但我想这将需要在设备上而不是模拟器上进行testing。

问题我想要做的是监视VC内的连接。 所以我在viewDidLoad中运行以下代码:

 // Start monitoring the internet connection [[AFNetworkReachabilityManager sharedManager] startMonitoring]; 

我将如何注册更改? 一旦networking连接发生变化,将会调用什么,我无法从文档中看到。

正如你可以阅读AFNetworking阅读我的网页

 [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status)); }]; 

这里也是官方文档的链接 。

我有一个单例AFHTTPRequestOperationManager类。 在单例中有一个方法:

 +(void)connectedCompletionBlock:(void(^)(BOOL connected))block { [[AFNetworkReachabilityManager sharedManager] startMonitoring]; [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { BOOL con = NO; NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status)); if (status == AFNetworkReachabilityStatusReachableViaWWAN || status == AFNetworkReachabilityStatusReachableViaWiFi) { con = YES; } if (block) { [[AFNetworkReachabilityManager sharedManager] stopMonitoring]; block(con); } }]; 

}

在发出请求之前,您可以调用此方法返回指示Internet是否可访问的块:

 [TLPRequestManager connectedCompletionBlock:^(BOOL connected) { if (connected) { // Make a request }else{ UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"Notice" message:@"Internet is not available." delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil]; [alertView show]; } }]; 

我只是通过你的问题和所有的答案。 之后,我决定一次做所有这些事情。 所以,在我现有的项目中,我只是通过cocoa豆包括了AFNetworking,这里是完全为我所用的解决scheme。

解决scheme – 首先AFNetworkReachabilityManager是一个单例类。 您不需要为sharedManager进行AppDelegate初始化。

 //[AFNetworkReachabilityManager sharedManager]; #import <AFNetworkReachabilityManager.h> - (void)viewDidLoad { //Starting the network monitoring process [[AFNetworkReachabilityManager sharedManager]startMonitoring]; //Checking the Internet connection... [[AFNetworkReachabilityManager sharedManager]setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status){ if (status == AFNetworkReachabilityStatusReachableViaWWAN || status == AFNetworkReachabilityStatusReachableViaWiFi) { UIAlertView *alertNetFound = [[UIAlertView alloc]initWithTitle:@"Network Found" message:@"Please Wait Until It is loading" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; [alertNetFound show]; }else{ UIAlertView *alertNetNotFound = [[UIAlertView alloc]initWithTitle:@"No Internet" message:@"Please Check Your Internet Connection Honey" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; [alertNetNotFound show]; } }]; 

因此,在这种情况下,每当设备连接到networking时,它将首先执行启动监控过程,然后每次都会触发状态块,并根据状态显示警报。

您可以根据您的select,通过replace状态块上的警报来做任何事情。 我用它从本地存储自动加载网页,但是为了简单起见,我删除了这些代码。

它甚至与我的模拟器和Mac mini一起工作。

谢谢

希望这有助于。

我在应用程序委托 – >中使用这个

  func reachablityCode() { AFNetworkReachabilityManager.sharedManager() AFNetworkReachabilityManager.sharedManager().startMonitoring() AFNetworkReachabilityManager.sharedManager().setReachabilityStatusChangeBlock({(status) in let defaults = NSUserDefaults.standardUserDefaults() if status == .NotReachable { defaults.setBool(false, forKey:REACHABLE_KEY) } else { defaults.setBool(false, forKey: REACHABLE_KEY) } defaults.synchronize() }) } 

然后在基本文件 – >中

  func isReachable() -> Bool { return NSUserDefaults.standardUserDefaults().boolForKey(REACHABLE_KEY) }