11
votes

NsurlConnectionDownloadDelegate Dossier

Maintenant que 5,0 est lancé et nous pouvons en discuter sans violation de la NDA d'Apple, j'ai un problème avec la nouvelle version de NsurlConnection. Ceci a un nouveau délégué, NsurlConnectionDownloadDelegate avec deux méthodes clés.

  1. Connexion: Didwreedata: TotalBytesTeswrites: attenduToTalBytes: est appelé à plusieurs reprises lorsque le téléchargement de fichier progresse

  2. ConnectionDidFinishTownloading: DestinationURL: est appelé une fois lorsque le téléchargement est terminé.

    Le fichier téléchargé devrait alors être à destinationURL (au moins pour la vie de cette méthode - l'intention est que vous l'obtenez et le déplacer quelque part permanent). Le problème est: ce n'est pas là. Ce répertoire est vide. J'ai signalé cela comme un bug à Apple et ils me disent que c'est une duplication d'une question dont ils sont déjà au courant.

    Si quelqu'un a une solution de contournement pour cela, sinon ils peuvent utiliser ce délégué avec succès, merci de me le faire savoir.

    Mise à jour 10/17/2011: J'ai renoncé à ce que l'ancien délégué fonctionne toujours bien en 5.0, même si la documentation indique que les méthodes de délégation ne sont disponibles que vers 4.3.


4 commentaires

J'ai soumis cela comme un bogue à Apple. Apple a confirmé que ceci est un bogue et l'a marqué comme une duplicata, il a donc été signalé par au moins 1 autre personne.


Ce bogue se produit toujours sur IOS 6 - avez-vous trouvé une solution? J'ai un exemple de code démontrant le problème.


Même problème ici, iOS 6.0.1


Toute personne a trouvé une solution à cela ??


4 Réponses :


1
votes

Documentation indique que le fichier n'est garanti que s'il est appelé que la méthode de déléguée est appelée afin que vous devriez le copier ailleurs au moment où la méthode du délégué est appelée.

Google me dit que les gens ont des problèmes lorsque le serveur envoie un nom de fichier cryptique et / ou un type mime.


5 commentaires

Merci. J'essaie effectivement de le déplacer dans la méthode. Le nom du fichier est catalogue.sqlite qui ne semble pas trop cryptique mais je vais l'essayer avec quelque chose de plus clair et rapportera.


Nan. Ne fonctionne pas avec un fichier PDF ou JPG. Je peux imprimer [Point de destinationURL] et voir le chemin de fichier et le nom de fichier. Mais ensuite un appel à [[NsfileManager par défaut] FileExistsatPath: [Point de destinationURL]] renvoie false.


est nsurlconnectiondownloadDelegate Le seul protocole associé à NsurlConnection Votre classe implémente? ..


qui plus le protocole NsurlConnectionDelegate dans lequel je n'utilise que didreceiveresponse


Essayez de commenter celui-là .. NsurlConnection se comporte maintenant différemment pour le type de délégué que vous passez (que je considère comme une mauvaise conception de toute façon)



1
votes

gens,

J'ai récemment découvert ce nouveau protocole NSurLConnectionDataDélégate. Cependant, la documentation iOS 5 est incomplète.

Le nouveau protocole NSurLConnectionDataDelegate est dans la documentation, mais la nouvelle version de NsurlConnection qui l'utilise n'est pas. Cette documentation nous dit toujours d'utiliser les méthodes de protocole NsurlConnectionDelegate NsurlConnectionDelegate maintenant.

Je recueille que NsurlConnection téléchargera maintenant des données d'une URL distante directement dans un fichier sur le disque local, ce qui ressemble beaucoup à la classe Nsurldownload dans Mac OS. Comment puis-je comprendre comment cela fonctionne?

L'en-tête de NsurlConnection indique que l'objet de connexion déduit ce que vous voulez en fonction de la version du protocole NsurlConnectionDelegate Le délégué est conforme. Cela semble vraiment vissé. Je n'ai jamais entendu parler de la conformité du protocole d'un délégué comme moyen de contrôler le comportement d'une classe avant.


1 commentaires

Duncan, je ne trouve pas de nsurlconnectiondatadélégate dans ma documentation de l'IOS5. Il y a une nouvelle NsurlConnectionDownloadDélégate qui fait l'objet de la discussion ci-dessus. Si vous utilisez ce délégué comme décrit dans la documentation, le fichier censé être téléchargé n'existe pas dans l'emplacement temporaire dans lequel il est censé être trouvé. Toutefois, si vous utilisez les méthodes désormais obsolètes telles que décrites dans la référence de la classe pour NsurlConnection, vous constaterez qu'ils fonctionnent toujours bien malgré l'avertissement qu'elles sont disponibles uniquement via iOS 4.3



1
votes

Même maintenant NsurlConnectionDownloadDelegate ne fonctionne pas.

Voici un bon remplacement: http://github.com/jbrennan/jbcontainatulconnection


0 commentaires

4
votes

Apparemment uniquement pour une utilisation avec des applications de journal. Ce gars aurait pu trouver un travail autour de:

http://adamernst.com/post/18948400652/a-Replacement- for-nsurlconnectiondownloadDelegate

Alternativement, utilisez simplement NsurlConnection. Mais vous guidez si vous implémentez les méthodes NsurldownloadDelegate, elles semblent remplacer les méthodes standard de délégués NsurlConnection. Si c'est la pratique de Didwridgeata: Méthode de NsurlConnecTowntownloadDelegate que vous voulez, par ex. Pour mettre à jour un UIPROGRESSVIEW, vous pouvez obtenir la même chose en saisissant la taille totale du fichier à partir de la réponse HTTP et en utilisant la méthode de NsurlConnection.


0 commentaires