2016-04-21 2 views
0

Nous utilisons un NSURLSession pour télécharger les données en arrière-plan et définir timeoutIntervalForResource pour qu'il expire si cela prend trop de temps, mais si, pour une raison quelconque, le serveur source ne le fait pas n'existe pas alors il reste assis et attend. Est-il possible de l'interrompre immédiatement ou de demander à NSURLSessionDownloadTask si quelque chose a déjà été téléchargé? A défaut, quelle serait la meilleure façon d'effectuer une pré-vérification pour s'assurer qu'un serveur existe avant d'essayer de télécharger des données?iOS NSURLSession attend le délai d'expiration si le serveur n'existe pas

Ces serveurs peuvent être hors de contrôle, donc nous ne pouvons pas placer un petit fichier à télécharger pour vérifier la disponibilité. Le seul fichier dont nous ne disposons pas pourrait être une vidéo assez importante, par exemple.

Répondre

1

Vous pouvez en effet demander à la tâche son statut. Tout d'abord, vérifiez la propriété réponse. Si cela est nul, alors vous n'avez pas reçu le premier paquet du serveur. Si ce n'est pas le cas, utilisez countOfBytesExpectedToReceive et countOfBytesReceived pour déterminer la progression.

Je devrais également noter que ces propriétés soutiennent toutes KVO, AFAIK. Vous pouvez également effectuer une recherche DNS explicite avant de planifier la demande d'arrière-plan si vous préférez, avec la mise en garde que cela vous empêcherait de planifier quelque chose qui pourrait effectivement fonctionner si la connexion Internet de l'utilisateur revient en ligne dans le entre-temps. :-)