telefono - porque mi iphone no agarra los datos moviles
Escenario de red y sin conexión a internet (5)
Utilizo AFNetworking
en mi aplicación para cada solicitud (como iniciar sesión, obtener datos de url, etc.).
Tome esto por ejemplo: un usuario hace clic en el botón de inicio de sesión y no hay conexión. ¿Cómo mostrar instantáneamente un UIAlertView
que dice el error? ¿La única forma es esperar el tiempo de espera de la solicitud y ejecutar el bloque de failure
? ¿No hay una manera de verificar instantáneamente si hay conexión o no?
¡Gracias!
¿Qué hay de usar Reachability?
Puede verificar si tiene una razón plausible para intentar una conexión antes de hacerlo.
Parece que el Apple Sample Project for Reachability muestra cómo obtener un estado inicial.
A partir del 0.9, AFHTTPClient
realidad tiene incorporada la capacidad de alcance de la red (una interfaz más simple para el código de alcance de Apple mencionado anteriormente). Solo incluya el marco SystemConfiguration
y use -setReachabilityStatusChangeBlock:
para especificar una respuesta cuando cambie el estado de accesibilidad.
Con AFNetworking
estos son los pasos que hay que seguir para poder aprovechar setReachabilityStatusChangeBlock:
después de agregar las clases AFNetworing:
- Agregue
SystemConfiguration.framework
a su proyecto - En el archivo pch agregue
#import <SystemConfiguration/SystemConfiguration.h>
- Suponiendo que tiene una subclase de
AFHTTPClient
en esta subclase agregue las siguientes líneas de código en la función init:
[self setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { NSLog(@"changed %d", status); //your code here }];
Tal vez podría usar "Alcance" para determinar si el dispositivo está conectado a la red. Aquí está el enlace al Apple Doc. : Reachability
Por ejemplo :
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNetworkChange:) name:kReachabilityChangedNotification object:nil];
reachability = [Reachability reachabilityForInternetConnection];
[reachability startNotifier];
NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus];
if(remoteHostStatus == NotReachable) {
//Your UIAlertView
}
Yo uso la AFNetworkingOperationDidFinishNotification
. Cada vez que falla una solicitud http, la alerta aparece e informa al usuario
- (void)addNetworkObserver
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(HTTPOperationDidFinish:)
name:AFNetworkingOperationDidFinishNotification
object:nil];
}
- (void)HTTPOperationDidFinish:(NSNotification *)notification
{
AFHTTPRequestOperation *operation = (AFHTTPRequestOperation *)[notification object];
if (![operation isKindOfClass:[AFHTTPRequestOperation class]]) {
return;
}
if (operation.error) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Connection error"
message:@"Missing connection to the internet"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
}
}