NSURLSession delegate-Methoden nicht aufgerufen
Habe ich eine sehr einfache app zum download einer text-Datei aus meinen web-server. Ich habe diese arbeiten perfekt mit NSURLConnection, aber ich versuche zu migrieren über NSURLSession statt.
Das Problem, das ich habe ist, dass keiner die delegate-Methoden aufgerufen werden.
Mein server ist Passwort geschützt, so dass ich die grundlegende http-Authentifizierung, um den Zugriff auf die Datei, aber wenn die didReceiveChallenge-Methode niemals aufgerufen wird.
Zeile code [getFileTask fortsetzen] scheint keinen Einfluss auf irgendetwas.
Mein setup ist wie folgt:
@interface ViewController : UIViewController <NSURLSessionDelegate, NSURLSessionDownloadDelegate, NSURLSessionTaskDelegate>
{
NSURLSession *session;
}
Die folgende Methode wird aufgerufen, aus 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];
}
Die delegate-Methoden, die ich umgesetzt haben, sind:
-(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);
}
}
}
Dank!
InformationsquelleAutor Scooter | 2014-01-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
GELÖST!
Die folgende Zeile von code, der übeltäter war:
Stellt sich heraus, das es benötigt, http://gab es auch, so funktioniert das
Es scheint immer noch seltsam für mich, dass es funktionierte einfach nicht. Ich hätte erwartet, dass ein Fehler-popup.
FYI, wenn Sie eine neue session mit Abschluss-handler - delegate-Methoden nicht aufgerufen werden.
Vielen, vielen Dank! Ich hatte eine completion-handler und die delegate-Methoden wurden nie genannt. Ich werde verrückt!
es ist NICHT wahr, dass die delegate-Methoden werden nicht aufgerufen, wenn Sie eine neue session mit Abschluss-handler. Ich habe es auf diese Weise und es funktioniert perfekt. Keine Dokumentation bestätigt Ihre Aussage. Es muss etwas anderes falsch in Ihrem code, wenn die Methoden werden nicht aufgerufen.
stackoverflow.com/questions/22653182/...
InformationsquelleAutor Scooter