nsurlconnection ios5

nsurlconnection - Los métodos de conexión de NSUR ya no están disponibles en IOS5



(4)

Estaba mirando la clase NSURLConnection que podría usarse para establecer una conexión sincronizada o asíncrona a una URL y luego recuperar sus datos ... se han hecho muchos cambios a 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 la connection:didReceiveResponse: message (que se envió previamente al delegado y que ya no está disponible) todavía está disponible en algunos protocolos. Cómo ¿implementa una conexión asíncrona y recupera, por ejemplo, los encabezados HTTP tan pronto como se recibe la Respuesta? Estoy seguro de que hay una manera mejor que usar NSURLConnection junto con la connection:didReceiveResponse: message .. ¿Los métodos como stringWithContentsOfURL siempre cargan el contenido de forma sincrónica? ¿Qué utiliza para implementar descargas asíncronas en sus aplicaciones, evitando métodos desaprobados y reaccionando ante eventos como la respuesta _http recibida_m, etc.? ¿Ejecutas descargas síncronas en tareas en segundo plano, si es posible?


¡NO! NO están limitados al uso para problemas de autenticación y fallas si examina detenidamente la biblioteca de Apple.

Desde la introducción de +(void)sendAsynchronousRequest:queue:completionHandler: to NSConnection class object, muchas cosas que pueden realizar tantos métodos NSConnectionDelegate como antes ahora pueden usarse en protocolos formales llamados " NSConnectionDataDelegate " y NSConnectionDownloadDelegate , abriendo una nueva sala para agregar más características a los métodos de NSURLConnection del NSURLConnection . (a partir de iOS5)

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


Acabo de encontrar este mismo problema. Parece que enviar una solicitud asíncrona se simplifica más con los 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 fallas.



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

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

Además, hay dos subprotocolo que se ajustan a NSURLConnectionDelegate :

NSURLConnectionDataDelegate se usa para delegados que cargan datos en la memoria, y declara los siguientes métodos, algunos de los cuales estoy seguro que le resultarán familiares:

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

NSURLConnectionDownloadDelegate se usa 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 de 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 para desarrolladores. A este último le lleva un tiempo estar al día.