2011-09-13 8 views
15

Ho visto un sacco di codice, incluso l'esempio SimpleURLConnections di Apple, che semplicemente trasmette qualsiasi NSURLResponse a un NSHTTPURLResponse. Se è sempre un NSHTTPURLResponse perché NSURLConnections non restituisce NSHTTPURLResponse?Quando è un NSURLResponse non un NSHTTPURLResponse?

Sono preoccupato che se ho semplicemente interrotto la risposta, sto introducendo il codice buggato.

Ad esempio, è possibile eseguire questa operazione senza verificare isKindOfClass?

- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse 
{ 
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)redirectResponse; 
// do stuff 
} 

risposta

17

E 'ok se si è certi che la connessione viene eseguito tramite il protocollo HTTP:

Un NSHTTPURLResponse oggetto rappresenta una risposta a una richiesta di carico URL HTTP. È una sottoclasse di NSURLResponse che fornisce i metodi per accedere alle informazioni specifiche per le risposte del protocollo HTTP.

Se ci si connette tramite FTP, per esempio, allora la fusione NSURLResponse a NSHTTPURLResponse non sarà corretto.

+0

I codici di risposta HTTP devono essere lunghi 3 cifre, se si sta ottenendo più di quella lunghezza, non è un codice di risposta HTTP valido. –

+0

Suggerisco di eseguire un controllo dei tipi migliore rispetto a un cast, in molti casi di arresti anomali correlati a NSURLResponse NON si tratta di un NSHTTPURLResponse anche se si tratta solo di connessioni HTTP. – Psycho

17

Il modo più sicuro per farlo è con l'introspezione.

if ([response isKindOfClass:[NSHTTPURLResponse class]]) { 
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)redirectResponse; 
    // do stuff 
}