2011-09-13 17 views
15

He visto un montón de código, incluida la muestra SimpleURLConnections de Apple, que simplemente envía cualquier NSURLResponse a NSHTTPURLResponse. Si siempre es un NSHTTPURLResponse, ¿por qué las NSURLConnections no devuelven NSHTTPURLResponse?¿Cuándo es una NSURLResponse no una NSHTTPURLResponse?

Me preocupa que si simplemente baje la respuesta, voy a presentar el código erróneo.

Por ejemplo, ¿está bien hacer esto sin verificar isKindOfClass?

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

Respuesta

17

Está bien si está seguro de que su conexión se ejecuta a través del protocolo HTTP:

objeto Una NSHTTPURLResponse representa una respuesta a una solicitud de carga URL HTTP. Es una subclase de NSURLResponse que proporciona métodos para acceder a información específica de las respuestas del protocolo HTTP.

Si se está conectando a través de FTP, por ejemplo, entonces la fundición NSURLResponse a NSHTTPURLResponse será incorrecta.

+0

Los códigos de respuesta HTTP deben tener 3 dígitos de longitud, si obtiene más de esa longitud, no es un código de respuesta HTTP válido. –

+0

Sugiero hacer una mejor comprobación de tipos que solo un molde, tengo muchos casos de bloqueos relacionados con NSURLResponse que NO es un NSHTTPURLResponse a pesar de que solo estoy tratando con las conexiones HTTP. – Psycho

17

La manera más segura de hacerlo es con la introspección.

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