title: NSURLSession delegate methods not called
body: <p>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.</p>
  
  <p>The issue I am having is that none of the delegate methods are being called.</p>
  
  <p>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.  </p>
  
  <p>The line of code [getFileTask resume] seems to have no effect on anything.</p>
  
  <p>My setup is as follows:</p>
  
  <pre><code>@interface ViewController : UIViewController &lt;NSURLSessionDelegate, NSURLSessionDownloadDelegate, NSURLSessionTaskDelegate&gt;
  {
     NSURLSession *session;
  }
  </code></pre>
  
  <p>The following method is called from viewDidLoad:</p>
  
  <pre><code>-(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];
  }
  </code></pre>
  
  <p>The delegate methods I have implemented are:</p>
  
  <pre><code>-(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);
          }
  
      }
  }
  </code></pre>
  
  <p>Thanks!</p>