2012-04-03 10 views
5

Sto facendo una richiesta di url asincrono con il nuovo metodo iOS 5: sendAsynchronousRequest: queue: completionHandler :. Questo utilizza un blocco per gestire la risposta, ma non vengono chiamati i metodi delegati NSURLConnectionDelegate? Non riesco a vedere un modo per impostare il delegato per la classe NSUrlConnection in questa istanza?Gestione di una risposta 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 ragione per cui ho bisogno di metodi delegato è perché una delle mie chiamate ottiene una risposta 401, che iOS gestisce in un modo diverso - rinviando l'autenticazione di delegare metodi. Quando arriva una risposta 401 - httpResponse.statusCode è solo "0".

C'è un modo per impedire a iOS di provare a gestire un 401 in modo diverso? In particolare, penso che sia necessario utilizzare il metodo continueWithoutCredentialForAuthenticationChallenge: delegate, ma in questo caso non viene chiamato alcun delegato.

Grazie!

+0

Utilizzare uno dei metodi di collegamento con un delegato, come initWithRequest: delegato: –

+0

Date un'occhiata a questa risposta: http://stackoverflow.com/questions/12828060/authentication-with-nsurlconnection-sendasynchronousrequest-with- completamento a mano –

risposta

1

È necessario utilizzare un'istanza NSURLConnection e utilizzare un delegato per quello. Il sendAsynchronousRequest:queue:completionHandler: è una scorciatoia per lo stesso ma con il comportamento predefinito senza un delegato.

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

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

utilizzare il metodo precedente per attivare i metodi dei delegati.

Problemi correlati