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) }