0

У меня есть Nsurlsesiondownloadtask хода, который я использую, чтобы загрузить файл XML локально размещенный на скажем: URL - http://10.232.254.59/catalogue.xmldidcompletewitherror возвращения ноля даже для запроса с плохим URL

Проблема заключается в том, когда я использую URL - http://10.232.254.59/catalogue.x или URL - http://10.232.254.59/catal или любая другая комбинация без изменения IP, didcompletewitherror делегат дает мне ошибку = (null).

// MainViewController.m 
@interface MainViewController() 
{ 
    NSURLSessionDownloadTask *download; 
} 
@property(nonatomic,strong)NSURLSession *backgroundSession; 

- (void)viewDidLoad { 
    NSURLSessionConfiguration *ConfigurationObject = [NSURLSessionConfiguration defaultSessionConfiguration]; 
    ConfigurationObject.timeoutIntervalForRequest = 10.0; 
    ConfigurationObject.timeoutIntervalForResource = 10.0; 
    self.backgroundSession = [NSURLSession sessionWithConfiguration:ConfigurationObject delegate:self delegateQueue:nil]; 

    [self LoadMediaUrl_StartTask_StartActivityIndicator]; 
} 
-(void)LoadMediaUrl_StartTask_StartActivityIndicator{ 
    NSURL *url ; 
    url = [self mediaUrlFromSettings]; 
    if(url.absoluteString.length != 0){ 
     download = [self.backgroundSession downloadTaskWithURL:url]; 
     [download resume]; 
     --do more stuff--- 
    }  
} 
- (void)URLSession:(NSURLSession *)session downloadTask:(nonnull NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(nonnull NSURL *)location{ 

NSLog(@"didFinishDownloadingToURL called"); 

NSFileManager *fileManager = [NSFileManager defaultManager]; 
dispatch_async(dispatch_get_main_queue(), ^{ 
*** start the parser *** 
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Success" message:[NSString stringWithFormat:@" Catalogue Download Success! Press OK to Load New Media List."] delegate:self cancelButtonTitle:@"OK" otherButtonTitles:@"cancel", nil]; 
    alert.tag = ALERT_VIEW_DOWNLOAD_SUCCESS; 
    [alert show]; 
}); 


    -(void)URLSession:(NSURLSession *)session task:(nonnull NSURLSessionTask *)task didCompleteWithError:(nullable NSError *)error 
{ 

     NSLog(@"didCompleteWithError error : %@",[error localizedDescription]); 
    if(error != nil){ 

     dispatch_async(dispatch_get_main_queue(), ^{ 
      [self.downloadActivityIndicator stopAnimating]; 
      [self.downloadProgressView setHidden:YES]; 
      self.DownloadImageView.alpha = 1.0; 
      UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Error" message:[NSString stringWithFormat:@" Catalogue Download Failed ! %s%@","\n",[error localizedDescription]] delegate:self cancelButtonTitle:@"OK" otherButtonTitles:@"Retry", nil]; 
      alert.tag =ALERT_VIEW_DOWNLOAD_FAILED; 
      [alert show]; 
     }); 
    } 

    download = nil; 
} 

я получаю правильную ошибку в didCompleteWithError когда IP меняется, но не тогда, когда я изменить IP/*, из-за чего даже в случае плохой URL, скачать предупреждение успеха показывает вверх.
Я также получаю звонок делегатадаже в плохом случае.
Я звоню LoadMediaUrl_StartTask_StartActivityIndicator еще в нескольких местах и ​​используя тот же backgroundSession obj.

Может ли кто-нибудь рассказать мне, что может быть причиной?

ответ

0

Я думаю, что я получил причину URLSession didCompleteWithError nil error

его потому, что он сообщает только на стороне клиента ошибки, но не уверен, как это scenarious право на проблемы с сервером.

+0

Не отправляйте ответы на вопросы в ответ. Опубликованный ответ должен полностью ответить на вопрос, а не задавать другой вопрос. – rmaddy

0

Чтобы обнаружить ошибки сервера (например, 404), выполните метод делегирования didReceiveResponse. Оттуда проверьте свойство httpStatusCode в объекте NSHTTPURLResponse. Сначала вам нужно направить NSURLResponse на указатель NSHTTPURLResponse.