Los métodos de NSURLConnection ya no están disponibles en IOS5


Estaba mirando la clase NSURLConnection que podría usarse para establecer una conexión sync o async a una URL y luego recuperar sus datos... se han hecho muchos cambios en esta clase con IOS 5 y he visto que introdujeron algunos protocolos formales relacionados con la autenticación o la descarga, pero no veo, por ejemplo, si el mensaje connection:didReceiveResponse: (que se envió previamente al delegado y que ya no está disponible) todavía está disponible en algunos protocolos.. Cómo implementar una conexión asincrónica y recuperar, por ejemplo, encabezados HTTP tan pronto como se recibe la respuesta? Estoy seguro de que hay una manera mejor que usar NSURLConnection junto con el mensaje connection:didReceiveResponse:.. métodos como stringWithContentsOfURL ¿siempre cargan contenido de forma sincrónica? ¿Qué se usa para implementar descargas asíncronas en sus aplicaciones evitando métodos obsoletos y reaccionando a eventos como _http response received_m, etc. ? ¿Lanzas descargas sincrónicas en tareas en segundo plano, si es posible?

Author: Gianni Costanzi, 2011-10-18

4 answers

NSURLConnectionDelegate se ha convertido en un protocolo formal (era un protocolo informal en versiones anteriores). En este protocolo, se declaran los siguientes métodos (no obsoletos):

  • connection:didFailWithError:
  • connectionShouldUseCredentialStorage:
  • connection:willSendRequestForAuthenticationChallenge:

Además, hay dos subprotocolos que se ajusten a NSURLConnectionDelegate:

NSURLConnectionDataDelegate se utiliza para los delegados que cargan datos en la memoria, y declara los siguientes métodos, algunos de los cuales estoy seguro que encontrará familiar:

  • connection:willSendRequest:redirectResponse:
  • connection:didReceiveResponse:
  • connection:didReceiveData:
  • connection:needNewBodyStream:
  • connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:
  • connection:willCacheResponse:
  • connectionDidFinishLoading:

NSURLConnectionDownloadDelegate se utiliza para delegados que almacenan datos directamente en un archivo de disco, y declara los siguientes métodos:

  • connection:didWriteData:totalBytesWritten:expectedTotalBytes:
  • connectionDidResumeDownloading:totalBytesWritten:expectedTotalBytes:
  • connectionDidFinishDownloading:destinationURL:

Como puede ver, todavía puede usar sus delegados anteriores, posiblemente con algunas modificaciones menores.

Para obtener más información, consulte el Documento de diferencias de API de iOS 4.3 a iOS 5.0 y NSURLConnection.h en su instalación local de Xcode. Cuando se lanza una nueva versión del SDK, no es raro que la documentación dentro de los archivos de encabezado sea más confiable que la documentación disponible en la biblioteca del desarrollador. Toma un tiempo para que este último esté actualizado.

 68
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-26 11:20:15

Acabo de encontrar este mismo problema. Parece que enviar una solicitud asíncrona se simplifica más con bloques y NSOperationQueue.

+ (void)sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:(void (^)(NSURLResponse*, NSData*, NSError*))handler

Esto significa que el delegado ahora solo se usa para problemas de autenticación y errores.

 2
Author: Dries De Smet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-26 09:43:18

¡NO! NO se limitan a su uso para problemas de autenticación y falla si se mira cuidadosamente a través de la biblioteca de Apple.

Desde la introducción de +(void)sendAsynchronousRequest:queue:completionHandler: al objeto de clase NSConnection, muchas cosas que pueden realizar tantos métodos NSConnectionDelegate como antes ahora se pueden usar en protocolos formales llamados "NSConnectionDataDelegate" & NSConnectionDownloadDelegate, abrir una nueva sala para agregar más funciones a los métodos NSURLConnection. (de iOS5 en adelante)

Así que creo que es una mejora, no limitar su uso.

 2
Author: Sungwook Kim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-15 11:38:06
 -1
Author: shreyas1811,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-12 06:44:05