2017-04-18 5 views
0

Je travaille sur une application qui prend quelques minutes pour télécharger un gros fichier et l'écrire sur le disque. Le client m'a informé qu'il souhaite pouvoir l'annuler à tout moment. Ce que j'ai fait est encapsuler un URLSession global qui s'occupera de la tâche de téléchargement. Après la saisie de l'utilisateur, je vais appeler invalidateAndCancel() sur la session. J'ai trouvé que la méthodeURLSessionDownloadTask: Annuler l'écriture de données

urlSession(_ session: URLSession, 
     downloadTask: URLSessionDownloadTask,  
     didWriteData bytesWritten: Int64, 
    totalBytesWritten: Int64, 
    totalBytesExpectedToWrite: Int64) 

ne cesse pas d'être appelé, même après la session a été invalidée et annulée.

QUESTION

Comment j'obtenir cette méthode pour arrêter l'exécution?

Répondre

0

Previous Thread

Essayez le lien ci-dessus, je pense qu'il explique mieux que je peux. Egalement Another Reference

+0

Umm ... non. La méthode 'invalidateAndCancel' annule toutes les tâches dans une session donnée (d'où« cancel »). Selon la documentation, vous ne devriez * jamais * recevoir d'appels de délégués supplémentaires après avoir appelé cette méthode (ou au plus quelques millisecondes après pour tenir compte du multithreading). Si ce n'est pas ce que vous voyez, alors soit vous n'annulez pas la bonne session, votre tâche n'est pas dans cette session, ou vous avez trouvé un bogue très sérieux. – dgatwood