2012-04-03 6 views
5

Estoy haciendo una solicitud de URL asíncrona con el nuevo método iOS 5: sendAsynchronousRequest: queue: completionHandler :. Esto usa un bloque para manejar la respuesta, ¿pero no se están llamando a ningún método de delegado NSURLConnectionDelegate? No puedo ver una forma de configurar el delegado para la clase NSUrlConnection en esta instancia?Manejando una respuesta 401 con sendAsynchronousRequest: queue: completionHandler:

[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { 

    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; 

    NSLog(@"HTTP response code: %i", httpResponse.statusCode); 

    if (error != nil) { 
     NSLog(@"There was error with the synchronous request: %@", error.description);    
    } 
}]; 

La razón que necesito los métodos de delegado se debe a que una de mis llamadas para crear una respuesta 401, que IOS maneja de una manera diferente - el aplazamiento de autenticación para delegar métodos. Cuando vuelve una respuesta 401, httpResponse.statusCode es solo "0".

¿Hay alguna manera de evitar que iOS intente manejar un 401 de forma diferente? En particular, creo que necesito usar el método continueWithoutCredentialForAuthenticationChallenge: delegate, pero en este caso no se llama a ningún delegado.

Gracias!

+0

Utilice uno de los métodos de conexión con un delegado, como initWithRequest: delegado: –

+0

Echa un vistazo a esta respuesta: http://stackoverflow.com/questions/12828060/authentication-with-nsurlconnection-sendasynchronousrequest-with- mano completa –

Respuesta

1

Debe usar una instancia de NSURLConnection y usar un delegado para eso. El sendAsynchronousRequest:queue:completionHandler: es un atajo para el mismo pero con el comportamiento predeterminado sin un delegado.

0
NSMutableURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]]; 

NSURLConnection *connection = [[NSURLConnection alloc] nitWithRequest:request delegate:self]; 

utilice el método anterior esto disparará los métodos delegados.

Cuestiones relacionadas