NSURLSession délégué des méthodes non appelé
J'ai créé un très simple application à télécharger un fichier texte à partir de mon serveur web. J'ai cela fonctionne parfaitement avec NSURLConnection, mais suis en train de migrer vers NSURLSession à la place.
La question que je vais avoir, c'est qu'aucun des délégué méthodes sont appelés.
Mon serveur est protégé par mot de passe donc j'ai besoin d'utiliser l'authentification http de base pour accéder au fichier, mais lorsque le didReceiveChallenge méthode n'est jamais appelé.
La ligne de code [getFileTask resume] ne semble pas avoir d'effet sur quoi que ce soit.
Ma configuration est comme suit:
@interface ViewController : UIViewController <NSURLSessionDelegate, NSURLSessionDownloadDelegate, NSURLSessionTaskDelegate>
{
NSURLSession *session;
}
La méthode suivante est appelée à partir de viewDidLoad:
-(void)setUpTheNetworking
{
NSString *fileURL = @"www.mywebsite.com/utility/file.txt";
NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
sessionConfig.allowsCellularAccess = YES;
sessionConfig.timeoutIntervalForRequest = 10;
sessionConfig.timeoutIntervalForResource = 10;
sessionConfig.HTTPMaximumConnectionsPerHost = 1;
session = [NSURLSession sessionWithConfiguration:sessionConfig delegate:self delegateQueue:nil];
NSURLSessionDownloadTask *getFileTask = [session downloadTaskWithURL:[NSURL URLWithString:fileURL]];
[getFileTask resume];
}
Le délégué méthodes que j'ai mises en place sont:
-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite
{
NSLog(@"Here we go");
}
-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didResumeAtOffset:(int64_t)fileOffset expectedTotalBytes:(int64_t)expectedTotalBytes
{
NSLog(@"Here we go");
}
-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location
{
NSLog(@"Here we go");
}
- (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler
{
if (challenge.previousFailureCount == 0)
{
NSURLCredentialPersistence persistence = NSURLCredentialPersistenceForSession;
NSURLCredential *credential = [NSURLCredential credentialWithUser:user password:@password persistence:persistence];
completionHandler(NSURLSessionAuthChallengeUseCredential, credential);
}
else
{
//handle the fact that the previous attempt failed
NSLog(@"%s: challenge.error = %@", __FUNCTION__, challenge.error);
completionHandler(NSURLSessionAuthChallengeCancelAuthenticationChallenge, nil);
}
}
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task
didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge
completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler
{
{
if (challenge.previousFailureCount == 0)
{
NSURLCredential *credential = [NSURLCredential credentialWithUser:user password:password persistence:NSURLCredentialPersistenceForSession];
completionHandler(NSURLSessionAuthChallengeUseCredential, credential);
}
else
{
NSLog(@"%s; challenge.error = %@", __FUNCTION__, challenge.error);
completionHandler(NSURLSessionAuthChallengeCancelAuthenticationChallenge, nil);
}
}
}
Merci!
OriginalL'auteur Scooter | 2014-01-18
Vous devez vous connecter pour publier un commentaire.
RÉSOLU!
La ligne de code suivante était le coupable:
S'avère nécessaire http://là aussi, de sorte que celui-ci fonctionne
Il semble toujours étrange pour moi que ça ne fonctionne pas. Je me serais attendu à une erreur de popup.
Pour info, si vous créez une session avec gestionnaire d'achèvement, délégué méthodes ne sera pas appelé.
Merci beaucoup! J'ai eu un gestionnaire d'achèvement et le délégué méthodes n'ont jamais été appelés. J'étais fou!
il n'est PAS vrai que délégué méthodes ne sera pas appelé si vous créez une session avec le gestionnaire d'achèvement. J'ai de cette façon et ça fonctionne parfaitement. Pas de documentation confirme votre déclaration. Il y a autre chose de mal dans votre code, si les méthodes ne sont pas appelés.
stackoverflow.com/questions/22653182/...
OriginalL'auteur Scooter