ios - how - Configuración de la accesibilidad con AFNetworking 2.0
install pod swift (4)
Como se puede leer en la AFNetworking
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status));
}];
Aquí también hay un enlace a la documentación oficial .
Estoy tratando de configurar Reachability usando la nueva AFNetworking 2.0.
En mi AppDelegate inicializo el sharedManager.
// Instantiate Shared Manager
[AFNetworkReachabilityManager sharedManager];
Luego, en el método de VC relevante, verifico si es accesible:
// Double check with logging
if ([[AFNetworkReachabilityManager sharedManager] isReachable]) {
NSLog(@"IS REACHABILE");
} else {
NSLog(@"NOT REACHABLE");
}
Actualmente, esto no está funcionando como se esperaba en el simulador, pero me imagino que debería ser probado en el dispositivo y no en el simulador.
Pregunta: Lo que me gustaría hacer es monitorear la conectividad dentro del VC. Entonces ejecuto lo siguiente en viewDidLoad:
// Start monitoring the internet connection
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
¿Cómo me registraría para los cambios? Lo que es / se llamará una vez que cambie la conexión de red, no puedo ver esto en la documentación.
Solo estaba revisando tu pregunta y todas las respuestas. Después de eso decidí hacer todas estas cosas una vez. Por lo tanto, en mi proyecto actual, solo incluí AFNetworking a través de cocoa-pods y aquí está la solución que me está funcionando por completo.
Solución: en primer lugar, AFNetworkReachabilityManager es una clase singleton. No es necesario realizar la inicialización de AppDelegate para sharedManager.
//[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];
}
}];
Por lo tanto, en este caso, cada vez que el dispositivo se conecte a una red, iniciará primero el proceso de Monitoreo y, luego, golpeará el bloque de estado cada vez y se mostrará alerta según el estado.
Puede hacer cualquier cosa de acuerdo con su elección reemplazando las alertas en el bloque de estado. Utilicé esto para cargar una página web automáticamente desde el almacenamiento local, pero eliminé ese código por simplicidad.
Incluso funciona con mi simulador y mi Mac mini.
Gracias
Espero que esto haya ayudado.
Tengo una clase AFHTTPRequestOperationManager de singleton. En el singleton tiene un método:
+(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);
}
}];
}
Antes de realizar una solicitud, llame a este método que devuelve un bloqueo que indica si se puede acceder a 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];
}
}];
Yo uso esto en el delegado de la aplicación ->
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()
})
}
Y luego esto en el archivo base ->
func isReachable() -> Bool {
return NSUserDefaults.standardUserDefaults().boolForKey(REACHABLE_KEY)
}