AFURLSessionManager : le downloadTask créé est Null
dream hope
Membre
Bonjour à tous.
J'ai un gros problème avec NSURLSession gerer dans AFURLSessionManager : régulièrement (quasiment un quart des téléchagement) le NSURLSessionDownloadTask créer est null :
- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request
progress:(NSProgress * __autoreleasing *)progress
destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination
completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler
{
__block NSURLSessionDownloadTask *downloadTask = nil;
dispatch_sync(url_session_manager_creation_queue(), ^{
downloadTask = [self.session downloadTaskWithRequest:request];
});
[self addDelegateForDownloadTask:downloadTask progress:progress destination:destination completionHandler:completionHandler];
return downloadTask;
}
C'est à dire que la ligne [self.session downloadTaskWithRequest:request]; me retourne nill.
Forcement ensuite ça plante.
Rien ne me permet de distingué une requête qui plante d'une autre, surtout que les trois quart fonctionnent.
Merci
D.H
Mots clés:
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
bah en fait ton block s'execute à part je pense (si je ne dis pas de bêtise) et donc ton return peut s'executer avant. Donc je ne sais pas si c'est correcte de bouger tes deux dernière ligne dans le dispatch.
ah j'ai mal lu ...
Hello,
C'est déficille de voir un bug dans ce bout de code puisque il vient d'une librairie bien testée et utilisée partout.
Poste plutôt une issue sur github. Les développeurs sont assez réactifs sur AFNetworking.
A priori, l'équipe de AFNetworking serai déjà au courant de ce bug :
https://github.com/AFNetworking/AFNetworking/issues/1675
Ce serai un bug Apple : https://devforums.apple.com/message/926113#926113
Du coup, dans AFURLSessionManager, je test le task et retourne nil pour que l'app puisse relancer la requête (max 3 essaie).
C'est bof, mais j'ai pas mieux...
Ma correction ne fonctionne pas : une fois que le task créer est nil, plus aucun task ne se créer et tous retourne nil !
Du coup, je suis bloqué et au bout d'une dizaine de téléchargement en background, plus rien ne se télécharge...
J'ai trouvé une autre solution : lorsque le task créé est nil, je supprime la session (en supprimant le AFURLSessionManager courant) et en récréé un nouveau.
Les premiers test ont l'air concluant.
Autre solution qui permet de ne pas modifier AFNetworking, c'est de faire un try/catch :
ça fonctionne bien par contre, je consielle de conté le nombre de fail histoire de ne pas faire une boucle infinie si jamais une autre erreur provoque cette exception à tous les appels.
D.H.