AF Verificación de networkinges Disponibilidad

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. He buscado en Google hasta que mis dedos se entumecieron, y aún tengo que encontrar una muestra de código decente que simplemente y fácilmente comtesting el estado de AFNetworking con AFNetworking . (Curiosamente, hay mucha discusión sobre la import de SystemConfiguration.framework , lo que parece una obviedad). Entonces, si mi usuario quiere minimizar el uso de sus datos y solo descarga usando wifi, ¿cómo puedo comprobar si hay wifi y solo downloadlo si Wi-Fi está 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 MUCHA cantidad de cosas que uno tiene que usar para llegar a lo que uno necesita. Solo necesito acceder a una url, download un file xml (basado en la accesibilidad) y hacer cosas con él. ¿Me estoy perdiendo algo que hace que esta sea una tarea simple?

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

En realidad contrario a lo que A-Live dijo que Reachability ES una parte de AFNetworking. Está implementado en AFHTTPClient.h aquí . Necesita las importaciones correctas en su file .pch como se explica aquí para poder usarlo.

Para usarlo, probablemente querrá tener una subclass de AFHTTPClient para que pueda usar setReachabilityStatusChangeBlock definido aquí . Aquí hay un ejemplo simple sin usar una subclass.

 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 le gusta la forma en que funciona esta configuration de accesibilidad, entonces recomendaría la bifurcación 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 }]; } 

Con AFNetworking 2.0 y superior, se puede comprobar la disponibilidad como esta,

  [[AFNetworkReachabilityManager shanetworkingManager] 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 shanetworkingManager] startMonitoring]; 

Para get el estado actual

 [AFNetworkReachabilityManager shanetworkingManager].reachable 

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

Puede usar AFHTTPRequestOperationManager.h

Algo pequeño tomado de la página github en sí:

 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];