ios ios6 afnetworking reachability

ios - Disponibilidad de comprobación de red



reachability ios (3)

He implementado AFNetworking sin subclasificar AFHTTPClient , en parte usando el siguiente código en mi DownloadQueueManager :

-(void)downloadPodcastAt:(NSString *)url toPath:(NSString *)path { NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:60.0]; AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; operation.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:NO]; [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { [self saveQueuedItemInformation]; } failure:^(AFHTTPRequestOperation *operation, NSError *error) { // Other stuff }]; [operation start]; }

Mi pregunta es múltiple. Busqué en Google hasta que mis dedos se adormecieron y aún tengo que encontrar un ejemplo de código decente que compruebe de forma simple y sencilla el estado de AFNetworking mediante AFNetworking . (Curiosamente, hay mucha discusión sobre la importación de SystemConfiguration.framework , que parece ser una obviedad). Entonces, si mi usuario desea minimizar su uso de datos y descargar solo con wifi, ¿cómo verifico si hay wifi y solo descargo si hay wifi disponible?

En segundo lugar, parece que AFNetworking quiere ser un front-end fácil de usar. Pero en realidad podría usar un front-end para este front-end, porque hay MUCHAS cosas que hay que eliminar para llegar a las cosas que uno necesita. Solo necesito acceder a una URL, descargar un archivo xml (basado en la accesibilidad) y hacer cosas con él. ¿Me estoy perdiendo algo que hace que esto sea una tarea simple?

Cuando entiendo esto, estoy construyendo totalmente un front-end o cinco para simplificar la implementación (asumiendo que no soy solo un idiota). Gracias de antemano por cualquier respuesta.


Con AFNetworking 2.0 y superior, uno puede verificar la disponibilidad de esta manera,

[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { switch (status) { case AFNetworkReachabilityStatusUnknown: case AFNetworkReachabilityStatusReachableViaWWAN: case AFNetworkReachabilityStatusReachableViaWiFi: //available break; case AFNetworkReachabilityStatusNotReachable: //not available break; default: break; } NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status)); }]; //start monitoring [[AFNetworkReachabilityManager sharedManager] startMonitoring];

Para obtener el estado actual

[AFNetworkReachabilityManager sharedManager].reachable


En realidad, al contrario de lo que A-Live dijo, Reachability ES una parte de AFNetworking. Se implementa en AFHTTPClient.h here . Necesita las importaciones correctas en su archivo .pch como se explica here para usarlo.

Para usarlo probablemente querrás tener una subclase de AFHTTPClient para que puedas usar setReachabilityStatusChangeBlock definido here . Aquí hay un ejemplo simple sin usar una subclase.

AFHTTPClient *client = [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@"http://google.com"]]; [client setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { if (status == AFNetworkReachabilityStatusNotReachable) { // Not reachable } else { // Reachable } if (status == AFNetworkReachabilityStatusReachableViaWiFi) { // On wifi } }];

Si no te gusta cómo funciona esta configuración de accesibilidad, recomendaría la bifurcación de Alcance de Apple de Tony Million . Ejemplo simple:

Reachability *reach = [Reachability reachabilityWithHostname:@"google.com"]; if ([reach isReachable]) { // Reachable if ([reach isReachableViaWiFi]) { // On WiFi } } else { // Isn''t reachable [reach setReachableBlock:^(Reachability *reachblock) { // Now reachable }]; [reach setUnreachableBlock:^(Reachability*reach) { // Now unreachable }]; }


Solo una actualización, la versión más reciente de AFNetworking ha dejado de usar AFHTTPClient.

Puede utilizar AFHTTPRequestOperationManager.h en su lugar

Algo pequeño tomado de la propia página github:

AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:url]; //url can be google.com or something you want to reach NSOperationQueue *operationQueue = manager.operationQueue; [manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { switch (status) { case AFNetworkReachabilityStatusReachableViaWWAN: case AFNetworkReachabilityStatusReachableViaWiFi: { NSLog(@"SO REACHABLE"); [operationQueue setSuspended:NO]; // or do whatever you want break; } case AFNetworkReachabilityStatusNotReachable: default: { NSLog(@"SO UNREACHABLE"); [operationQueue setSuspended:YES]; //not reachable,inform user perhaps break; } } }]; [manager.reachabilityManager startMonitoring];