Yo uso AFNetworking en mi app para cada solicitud (como login, obtener datos de url, etc).

Tomar esto por ejemplo: un usuario haga clic en el botón de inicio de sesión y no hay conexión, cómo instantáneamente mostrar un UIAlertView que dice el error? El sólo manera es esperar la solicitud de tiempo de espera y ejecutar el failure bloque? No hay alguna forma de comprobar si hay conexión o no?

Gracias!

InformationsquelleAutor Fred Collins | 2012-02-12

5 Comentarios

  1. 57

    Como de 0.9, AFHTTPClient en realidad tiene la accesibilidad de la red integrada (una interfaz más simple para Apple citados Accesibilidad de código). Sólo tienes que incluir el SystemConfiguration marco y el uso -setReachabilityStatusChangeBlock: para especificar una respuesta, cuando la accesibilidad de los cambios de estado.

    • Hola mattt y gracias por la respuesta. Pero su sugerencia es revisar el estado actual de la conexión a internet antes de todos método que utiliza internet y si no hay ninguna conexión muestra un mensaje de alerta?
    • No, en absoluto. AFHTTPClient monitores para la accesibilidad de los cambios y ejecuta el bloque especificado cuando eso sucede. El bloque tiene un solo argumento, que es un valor booleano para indicar si o no el baseURL es alcanzable.
    • He subclases AFHTTPClient y he anulado -setReachabilityStatusChangeBlock: con un NSLog(@"test") dentro, pero la instrucción no se ejecuta nunca. Por qué?
    • Compruebe que ha incluido la SystemConfiguration marco. Si eso no vinculadas al proyecto, ya que el código no se ejecuta.
    • podría usted añadir algo de código de ejemplo para que yo pudiera ver lo que debo hacer. Gracias
    • No reemplace el método, usted lo llama en la subclase y pasar un bloque que contiene el código que se desea ejecutar. Asegúrese de que usted saque su reemplazar o NO funcionará.
    • Agregar #import <SystemConfiguration/SystemConfiguration.h> a la cabecera del prefijo del proyecto (Prefijo.pch). Este es el paso necesario después de la adición de SystemConfiguration marco.
    • He puesto setReachabilityStatusChangeBlock:, antes de establecer un JSONRequestOperationWithRequest:success:failure, es esta la manera correcta de hacerlo? si ese es el caso, cuando llego a un estado de AFNetworkReachabilityStatusNotReachable, ¿cómo puedo cancelar la operación, o el fracaso del bloque será llamado automáticamente cuando se ve a un AFNetworkReachabilityStatusNotReachable?

  2. 28

    Con AFNetworking estos son los pasos que uno tiene que seguir con el fin de tomar ventaja de setReachabilityStatusChangeBlock: después de la adición de la AFNetworing clases –

    1. Agregar SystemConfiguration.framework a su proyecto
    2. En archivo pch agregar #import <SystemConfiguration/SystemConfiguration.h>
    3. Asumiendo que usted tiene una subclase de AFHTTPClient en esta subclase agregar a continuación de líneas de código en la función init –
    [auto setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus estado) { 
    NSLog(@"cambió %d", estado); 
    //aquí el código 
    }]; 
    
  3. 2

    Tal vez usted podría utilizar «Accesibilidad» para determinar si el dispositivo está conectado a la red.
    Aquí está el enlace a la Manzana Doc. : La accesibilidad de la

    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
    }
  4. 2

    Yo uso el AFNetworkingOperationDidFinishNotification.
    Cada vez que una petición http fallará, la alerta aparece e informa al usuario de

    - (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];
       }
    }
  5. 0

    Cómo sobre el uso de La accesibilidad?

    Usted puede comprobar si tiene una razón verosímil para intentar una conexión antes de hacerlo.

    Se parece a la Apple Proyecto de Ejemplo para la Accesibilidad de la muestra cómo obtener el estado inicial.

    • Para el caso de que la accesibilidad no devuelve, no cualquier enchufe de e/s de fallar de inmediato, demasiado?
    • Sí, esa es la forma de Comunicación funciona, pero le da extras como la posibilidad de recibir notificaciones cuando la accesibilidad de los cambios interrupciones, no de la votación.
    • Disculpe Adán, pero si la red no se utiliza, pero el dispositivo está conectado y puedo comprobar el estado de la red, la Accesibilidad de decirme que no tengo conexión. Esta respuesta a explicar lo que yo diría de una mejor manera: stackoverflow.com/a/9186073/719127
    • A la derecha. Supongo que mi punto era que la pregunta en cuestión, utilizando la accesibilidad no es mejor que sólo está tratando de hacer la conexión.
    • Actualizado con un enlace a la muestra de código de comprobación de la accesibilidad antes de hacer su solicitud real que se puede hacer.
    • Gracias tio, voy a tratar de ponerlo en práctica en tiempo y vuelvo con la respuesta. 🙂

Dejar respuesta

Please enter your comment!
Please enter your name here