66 votes

iOS5 NSURLConnection méthodes obsolètes

Je suis en train d'écrire une application iOS qui fait des requêtes asynchrones pour obtenir des données sur le réseau. Il semble que beaucoup de gens vous recommandons d'utiliser NSURLConnection pour cela, et mentionnent fréquemment le délégué de la méthode de connexion:didReceiveData:.

Malheureusement, je ne peux pas pour la vie de me trouver où cette méthode du délégué est documenté. Pour l'un, il n'est pas dans le protocole de référence pour NSURLConnectionDelegate. Il est répertorié dans la NSURLConnection Classe de Référence, mais a apparemment été abandonnée depuis iOS5. La documentation ne permet pas d'expliquer pourquoi il était obsolète, ou de ce que les développeurs doivent utiliser à la place pour obtenir une fonctionnalité similaire.

Ce qui me manque? Beaucoup de ce que j'ai lu semble impliquer que de grands changements ont été apportés à NSURLConnection pour iOS5. Où ces changements sont-ils documentés? La documentation est de déléguer les méthodes complète?

Merci

47voto

millimoose Points 22665

La pêche autour les fichiers d'en-tête me dit que les méthodes ont été déplacés à partir d'un protocole informel (qui est obsolète Obj-C motif) dans un formel délégué protocole appelé NSURLConnectionDataDelegate en NSURLConnection.h, mais ne dispose pas d'une documentation publique.

Le reste de la documentation conserve à l'aide de méthodes comme avant, donc je suppose que c'est une omission dans la documentation. I. e. les méthodes (pour la plupart) ne vont pas n'importe où, ils étaient juste remanié en plusieurs protocoles et l'équipe de documentation a été relâchement. Essayez de faire votre délégué objet conforme au protocole approprié, et de mettre en œuvre les méthodes avec les signatures à partir du fichier d'en-tête.

24voto

ekscrypto Points 522

La Documentation est en effet un gâchis, bien que regardant le changelog de 4,3 à 5.0 pour NSURLConnection.h:

Supprimé

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)

Ajouté

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)

Il semble donc que ces fonctions sont en effet toujours là. Il suffit d'ajouter les protocoles de votre @interface de déclaration et vous devriez être bon d'aller.

J'ai essayé la nouvelle NSURLConnectionDownloadDelegate, être averti que, si ces méthodes sont présents dans votre délégué, votre NSURLConnectionDataDelegate méthodes ne sera PAS appelé.

J'ai aussi eu la question de l'ouverture de la destinationURL, iOS me disait que le fichier n'existe pas, bien que la documentation indique que le fichier est garanti lors de l'appel de méthode.

7voto

Duncan C Points 18661

La documentation est un @$@#$ mess. C'est la vraie histoire.

La Documentation sur NSURLConnection, comme l'écrit, vous laisse de haute et sèche.

La première partie de la documentation indique d'utiliser diverses méthodes dans le NSURLConnection protocole (comme connexion:didReceiveData:) pour gérer les données. Si vous cliquez sur l'une de ces méthodes dans la vue d'ensemble, il vous amène à une liste de MÉTHODES OBSOLÈTES!)

L'histoire vraie que j'ai pu reconstituer, c'est que la plupart des méthodes d'autrefois dans NSURLConnectionProtocol ont été déplacés vers un nouveau protocole appelé NSURLConnectionDataProtocol. Malheureusement, ce nouveau protocole n'est pas documenté, ou il n'est pas indexé, donc vous ne pouvez pas le trouver. Ce qui revient à la même chose.)

Dans d'autres nouvelles intéressantes, il y a apparemment un nouveau protocole appelé NSURLConnectionDownloadDelegate. Il sonne comme NSURLConnection pour iOS est l'ajout de certaines fonctionnalités qui sont disponibles dans NSURLDownload dans MacOS. Le NSURLConnectionDownloadDelegate protocole EST documenté.

0voto

Clay Bridges Points 3470

On pourrait penser que la dépréciation de ces méthodes à partir de NSURLConnection justifierait une sorte de explainer, mais je n'ai pas encore trouvé. Le meilleur que j'ai pu faire jusqu'ici, Apple URL de Chargement Guide de Programmation Système:

Afin de télécharger le contenu d'une URL, une application doit fournir un délégué de l'objet, au minimum, met en œuvre le délégué suivant les méthodes: connection:didReceiveResponse:, connection:didReceiveData:, connection:didFailWithError: et connectionDidFinishLoading:

ce qui implique un protocole informel.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X