2011-10-31 23 views
7

Agradezco las gracias por el artículo Convert NSData bytes to NSString?, especialmente para @ christo16. Anteriormente dependía de ASIHttpRequest solo para obtener valor del servidor PHP. Ahora usando simplemente esta línea de código:¿Por qué NSData dataWithContentsOfURL a veces devuelve valor NULL?

NSString *pageContents = [NSData dataWithContentsOfURL: [NSURL URLWithString:@"http://www.apple.com"]] 

Puedo obtener la funcionalidad que quería.

Pero, ¿por qué a veces esa línea causa pageContents ser NULL. Ya cambio esa línea en esto:

NSString *fullUrl = [NSString stringWithFormat:@"http://www.apple.com"]; 
NSURL *url = [[NSURL alloc] initWithString:fullUrl]; 
NSData *pageContents; 
NSString *response = NULL; 

while(response==NULL) 
{ 
    pageContents = [NSData dataWithContentsOfURL: [NSURL URLWithString:fullUrl]]; 
    response = [NSString stringWithUTF8String:[pageContents bytes]]; 
    NSLog(@"content = %@", response); 
} 

¿Hay alguna forma mejor de hacerlo? Hasta ahora, no tengo ningún problema. Me pregunto si hay una forma más elegante de lograr el mismo resultado

Gracias

+1

La desventaja de ese one-liner es que bloquea su UI, posiblemente por un largo tiempo. El bucle es aún peor: si el servidor no responde a las conexiones, entonces bloquearía la IU de manera efectiva para siempre (hasta que SpringBoard se canse y mate su proceso). –

Respuesta

18

Volverá nil si hay un error al recuperar los datos.

Puede usar el mensaje dataWithContentsOfURL:options:error: para averiguar por qué está devolviendo nada. El error se devolverá en el puntero NSError* que pase.

+0

gracias @Brigham por esa información. Pero, el problema es que a veces es nulo, a veces no. Entonces, simplemente lo obligo a probarlo hasta que no sea nulo. Si usa dataWithContentsOfURL: options: error, ¿cómo maneja eso? – swdev

+1

@swdev: observa el error para descubrir qué fue lo que salió mal y reacciona de forma adecuada a lo que salió mal. Por lo general, esto presentará el error al usuario. –

1

Probablemente la imagen es demasiado grande o url es incorrecta.

NSError* error = nil; 
NSData* data = [NSData dataWithContentsOfURL:yourURL options:NSDataReadingUncached error:&error]; 
if (error) { 
    NSLog(@"%@", [error localizedDescription]); 
} else { 
    NSLog(@"Data has loaded successfully."); 
} 
0

compruebe su conexión a la red. Si está conectado, el problema se resolverá.

Cuestiones relacionadas