NSHTTPURLResponse становится NSURLResponse - PullRequest
4 голосов
/ 17 января 2012

Я использую if-Modified-Since в заголовке HTTP, чтобы решить, должен ли я загрузить файл. Приложение было протестировано, и все было в порядке, но теперь я получаю ошибки, когда спрашиваю свой экземпляр NSHTTPURLResponse response.statusCode или [[response allHeaderFields] objectForKey:@"Last-Modified"].

Кажется, это просто NSURLResponse. Каковы возможные причины?

Я прочитал эту тему , но проблема все еще не ясна для меня. Заранее спасибо! UPD: некоторый код:

        NSURL *url = [NSURL URLWithString:urlString];  
        NSFileManager *fileManager = [NSFileManager defaultManager];  

        NSMutableURLRequest *myRequest = [NSMutableURLRequest requestWithURL:url];  
        [myRequest setHTTPMethod:@"GET"];

        NSDateFormatter *df = [[NSDateFormatter alloc] init];  
        df.dateFormat = @"EEE',' dd MMM yyyy HH':'mm':'ss 'GMT'";  
        df.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];  
        df.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];  

        [myRequest addValue:[df stringFromDate:lastModifiedLocal]  forHTTPHeaderField:@"If-Modified-Since"];

        myRequest.cachePolicy = NSURLRequestReloadIgnoringLocalAndRemoteCacheData;

        NSHTTPURLResponse *response=nil;  
        NSError* error = nil;

        NSData* data =  [NSURLConnection sendSynchronousRequest:request              returningResponse:&response error:&error];  

        if (error) {
        NSLog(@"Error sending request: %@", [error localizedDescription]);
    }
//As was advised
        NSHTTPURLResponse* newResp = (NSHTTPURLResponse*)response;
//crash here        
NSLog(@"%d", newResp.statusCode);

UPD: Ошибка в коде - myRequest и request - это разные переменные. Проблема решена.

Ответы [ 2 ]

3 голосов
/ 17 января 2012

Весьма вероятно, что запрос не выполнен и объект ответа не генерируется.Вы можете проверить это следующим образом:

if (response) {
    NSHTTPURLResponse* newResp = (NSHTTPURLResponse*)response;
    NSLog(@"%d", newResp.statusCode);
}
else {
    NSLog(@"No response received");
}

Как было предложено другим комментатором, вам, вероятно, следует включить объект NSError, чтобы вы могли более эффективно проверять ошибки:

NSHTTPURLResponse *response=nil;
NSError *error = nil;  
NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error: &error];  

Затем выможете проверить ошибку перед проверкой ответа:

if (error) {
    NSLog(@"Error sending request: %@", [error localizedDescription]);
}
0 голосов
/ 17 января 2012

Вы можете просто разыграть его:

- (void)connection:(NSURLConnection *)conn didReceiveResponse:(NSURLResponse *)aResponse 
{
    self.response = (NSHTTPURLResponse *)aResponse;
}

Редактировать

Ваш ответ НЕДЕЙСТВИТЕЛЕН.Попробуйте это:

NSHTTPURLResponse *response = nil;
NSData* data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];  
...