AFNetworking and Reachability: ¿Por qué la request falla después de la reanudación?

Utilizo AFHTTPSessionManager para enviar requestes a un server y uso la lógica de Alcance para verificar si hay una connection.

El código para la request es simple:

  [manager POST:urlString parameters:parameters success:^(NSURLSessionDataTask *task, id responseObject) { //Parse data... } failure:^(NSURLSessionDataTask *task, NSError *error) { NSLog(@"Error: %@", error); }]; 

Además, hay un código que verifica la disponibilidad en la forma como ejemplo en GitHub:

 NSOperationQueue *operationQueue = manager.operationQueue; [manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { switch (status) { case AFNetworkReachabilityStatusReachableViaWWAN: case AFNetworkReachabilityStatusReachableViaWiFi: [operationQueue setSuspended:NO]; break; case AFNetworkReachabilityStatusNotReachable: default: [operationQueue setSuspended:YES]; break; } }]; 

Cuando el estado cambia ( AFNetworkReachabilityStatusNotReachable to AFNetworkReachabilityStatusReachableViaWiFi por ejemplo), y se reanuda la request, ¿por qué se ejecuta el bloque de falla? ¿Cuál es la razón para eso? ¿Estoy haciendo algo mal?

operationQueue en AFURLSessionManager solo se utiliza para las devoluciones de llamada de delegado (consulte la documentation en el encabezado).

Sospecho que la request se lleva a cabo cuando está fuera de línea, pero las devoluciones de llamada están suspendidas y se disparan solo cuando se reanuda la operationQueue .

Sin embargo, aún no he encontrado una forma de reanudar las requestes después de entrar en línea.

Creo que puede ser un error de networking.

De hecho: AFNetworking no verifica Internet para usted, así que si regresa una falla, hay un error de conectividad u otro error lógico (supongo que no es el segundo caso).

En primer lugar: ¿tu administrador de accesibilidad qué testing? ¿A qué dirección IP o dominio intentas llegar? Porque si tiene un estado de accesibilidad que le devuelve una connection wifi, no le informa que su service web le responde.

Si testing su connection a Internet cuando está en un bloque de falla de AFNetworking, es importante probar la dirección específica de su server web asociado. También puede hacer más de una testing tan pronto como cambie la connection a Internet porque puede tener networking Wi-Fi pero aún no se puede acceder a Internet (mientras que la dirección IP dinámica está asignando, por ejemplo).

¿Ocurre esto en el dispositivo o solo en un simulador? Debido a que tuve problemas con Reachability en el simulador Xcode 5, pero funciona bien en el dispositivo (Mi problema fue que cuando tiene que cambiar de modo Offline a Online, dice que todavía está fuera de línea y arroja algún error)

Cuando uso el AFNetworkReachabilityManager , generalmente lo inicio en AppDelegate.m . En realidad, no recuerdo si tiene que comenzar allí, pero creo que debería hacerlo. Si no lo comienzas allí, pruébalo, así:

 - (void)applicationDidBecomeActive:(UIApplication *)application { [[AFNetworkReachabilityManager shanetworkingManager] startMonitoring]; // Rest of your code here } 

Editar:

Intenta también:

 NSOperationQueue * operationQueue = [[NSOperationQueue alloc] init]; [operationQueue addOperation:manager.operationQueue]; [manager.operationQueue release]; // as i have read you must do this release, but not sure // rest of your code here 

Probablemente haya visto esta publicación pero, si no, tal vez sea útil: http://www.raywenderlich.com/19788/how-to-use-nsoperations-and-nooperationqueues

Editar 2:

Supongamos que está tratando de simular la situación en la que no tiene connection a Internet desde el comienzo de la enqueue, tal vez su problema sea similar a esta capacidad de scope AFNetworking 2.0 .

En este sentido, probablemente deberías establecer una comprobación de accesibilidad antes de la operación de enqueuedo, así:

 if ([AFNetworkReachabilityManager shanetworkingManager].reachable) { NSOperationQueue *operationQueue = manager.operationQueue; } 

Déjame saber si funciona.