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.
Incluso no he encontrado la documentación en el sitio web de Apple
Debería haber estado disponible aquí.
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.