NSURLSession delegate methods not called

匿名 (未验证) 提交于 2019-12-03 08:52:47

问题:

I have created a very simple app to download a text file from my web server. I have this working perfectly with NSURLConnection, but am trying to migrate over to NSURLSession instead.

The issue I am having is that none of the delegate methods are being called.

My server is password protected so I need to use the basic http authentication to access the file, but when the didReceiveChallenge method is never called.

The line of code [getFileTask resume] seems to have no effect on anything.

My setup is as follows:

@interface ViewController : UIViewController <NSURLSessionDelegate, NSURLSessionDownloadDelegate, NSURLSessionTaskDelegate> {    NSURLSession *session; } 

The following method is called from 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]; } 

The delegate methods I have implemented are:

-(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);         }      } } 

Thanks!

回答1:

SOLVED!

The following line of code was the culprit:

 NSString *fileURL = @"www.mywebsite.com/utility/file.txt"; 

Turns out it needed http:// in there as well, so this one works

 NSString *fileURL = @"http://www.mywebsite.com/utility/file.txt"; 

It still seems weird to me that it just didn't work. I would have expected an error to popup.



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!