bottom bar ios ios5

ios - bottom - status bar iphone



Métodos de NSURLConnection de iOS5 obsoletos (4)

Intento escribir una aplicación iOS que realice solicitudes asincrónicas para obtener datos a través de la red. Parece que mucha gente recomienda usar NSURLConnection para esto, y frecuentemente mencionan la conexión del método de delegado: didReceiveData :.

Lamentablemente, no puedo por mi cuenta averiguar dónde está documentado este método delegado. Por un lado, no está en la referencia de protocolo para NSURLConnectionDelegate . Se enumera en la referencia de clase de NSURLConnection , pero al parecer ha quedado obsoleta a partir de iOS5. La documentación no explica por qué estaba en desuso, o lo que los desarrolladores deberían usar en su lugar para lograr una funcionalidad similar.

¿Qué me estoy perdiendo? Mucho de lo que he leído parece implicar que se hicieron grandes cambios en NSURLConnection para iOS5. ¿Dónde están documentados estos cambios? ¿La documentación de los métodos de delegado está completa?

Gracias


La documentación es realmente un desastre, aunque mirando el registro de cambios de 4.3 a 5.0 para NSURLConnection.h:

Remoto

Removed -[NSObject connection:canAuthenticateAgainstProtectionSpace:] Removed -[NSObject connection:didCancelAuthenticationChallenge:] Removed -[NSObject connection:didFailWithError:] Removed -[NSObject connection:didReceiveAuthenticationChallenge:] Removed -[NSObject connection:didReceiveData:] Removed -[NSObject connection:didReceiveResponse:] Removed -[NSObject connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:] Removed -[NSObject connection:needNewBodyStream:] Removed -[NSObject connection:willCacheResponse:] Removed -[NSObject connection:willSendRequest:redirectResponse:] Removed -[NSObject connectionDidFinishLoading:] Removed -[NSObject connectionShouldUseCredentialStorage:] Removed NSObject(NSURLConnectionDelegate)

Adicional

Added -[NSURLConnection currentRequest] Added -[NSURLConnection originalRequest] Added +[NSURLConnection sendAsynchronousRequest:queue:completionHandler:] Added -[NSURLConnection setDelegateQueue:] Added NSURLConnectionDataDelegate Added -[NSURLConnectionDataDelegate connection:didReceiveData:] Added -[NSURLConnectionDataDelegate connection:didReceiveResponse:] Added -[NSURLConnectionDataDelegate connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:] Added -[NSURLConnectionDataDelegate connection:needNewBodyStream:] Added -[NSURLConnectionDataDelegate connection:willCacheResponse:] Added -[NSURLConnectionDataDelegate connection:willSendRequest:redirectResponse:] Added -[NSURLConnectionDataDelegate connectionDidFinishLoading:] Added NSURLConnectionDelegate Added -[NSURLConnectionDelegate connection:canAuthenticateAgainstProtectionSpace:] Added -[NSURLConnectionDelegate connection:didCancelAuthenticationChallenge:] Added -[NSURLConnectionDelegate connection:didFailWithError:] Added -[NSURLConnectionDelegate connection:didReceiveAuthenticationChallenge:] Added -[NSURLConnectionDelegate connection:willSendRequestForAuthenticationChallenge:] Added -[NSURLConnectionDelegate connectionShouldUseCredentialStorage:] Added NSURLConnectionDownloadDelegate Added -[NSURLConnectionDownloadDelegate connection:didWriteData:totalBytesWritten:expectedTotalBytes:] Added -[NSURLConnectionDownloadDelegate connectionDidFinishDownloading:destinationURL:] Added -[NSURLConnectionDownloadDelegate connectionDidResumeDownloading:totalBytesWritten:expectedTotalBytes:] Added NSURLConnection(NSURLConnectionQueuedLoading)

Entonces parece que esas funciones de hecho todavía están allí. Simplemente agregue los protocolos a su declaración @interface y estará listo para continuar.

Probé el nuevo NSURLConnectionDownloadDelegate, ten en cuenta que si estos métodos están presentes en tu delegado, NO se invocarán tus métodos NSURLConnectionDataDelegate.

También tuve problemas para abrir el destinationURL, iOS me decía que el archivo no existía aunque la documentación indica que el archivo está garantizado para existir durante la llamada al método.


La documentación es un @ $ @ # $ lío. Esa es la verdadera historia.

La Documentación sobre NSURLConnection , tal como está escrita, lo deja a uno alto y seco.

La primera parte de la documentación le indica que use varios métodos en el protocolo NSURLConnection (como connection:didReceiveData: para manejar los datos entrantes. Si hace clic en alguno de esos métodos en la vista general, ¡lo llevará a una lista de MÉTODOS DEPRECADOS!)

La verdadera historia que he podido reconstruir es que la mayoría de los métodos anteriores en NSURLConnectionProtocol se han trasladado a un nuevo protocolo denominado NSURLConnectionDataProtocol . Lamentablemente, ese nuevo protocolo no está documentado o no está indexado, por lo que no puede encontrarlo. Lo cual equivale a lo mismo.)

En otras noticias interesantes, aparentemente hay un nuevo protocolo llamado NSURLConnectionDownloadDelegate . Parece que NSURLConnection para iOS está agregando algunas de las funcionalidades disponibles en NSURLDownload en MacOS. El protocolo NSURLConnectionDownloadDelegate está documentado.


Pensarías que desaprobar esos métodos de NSURLConnection justificaría algún tipo de explicador, pero aún no he encontrado ninguno. Lo mejor que pude hacer hasta ahora es la Guía de programación del sistema de carga de URL de Apple:

Para descargar el contenido de una URL, una aplicación necesita proporcionar un objeto delegado que, como mínimo, implemente los siguientes métodos de delegado: connection:didReceiveResponse: connection:didReceiveData: connection:didFailWithError: y connectionDidFinishLoading:

lo que implica un protocolo informal.


Buscar alrededor de los archivos de encabezado me dice que los métodos se movieron de un protocolo informal (que es un patrón obsoleto de Obj-C) a un protocolo de delegado formal llamado NSURLConnectionDataDelegate que está en NSURLConnection.h , pero no tiene una documentación pública.

El resto de la documentación sigue usando los métodos como antes, así que supongo que esto es una omisión en la documentación. Es decir, los métodos (la mayoría) no van a ningún lado, simplemente se reorganizaron en varios protocolos y el equipo de documentación ha estado relajándose. Intente hacer que su objeto delegado cumpla con el protocolo apropiado e implemente los métodos con las firmas del archivo de encabezado.