2012-01-17 2 views
4

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

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

Я читал this topic, но проблема все еще не ясна для меня. Спасибо заранее! 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 и запрос разные переменные. Задача решена.

+0

Каков результат для 'data' после' sendSynchronousRequest: returnResponse: error: '? Кроме того, почему бы не попробовать передать фактический указатель «NSError», поэтому, если что-то пойдет не так, возможно, вы знаете, что это такое, зарегистрировав «error.localizedDescription»? – NJones

+0

Данные нормальные, как и ожидалось. –

+0

Произошла ошибка из-за моего глупого несогласия - '[myRequest addValue: [df stringFromDate: lastModifiedLocal] forHTTPHeaderField: @" If-Modified-Since "]; myRequest.cachePolicy = NSURLRequestReloadIgnoringLocalAndRemoteCacheData; 'и ' NSData * data = [NSURLConnection sendSynchronousRequest: request returnResponse: & response error: & error]; 'после него другая переменная с локальным URL-адресом, поэтому там нет HTTP. Сожалею. Будет одобрен самый полный ответ. –

ответ

3

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

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

Я сделал запись ошибок и ошибка 0x0, поэтому нет информации. Код обновлен, спасибо. –

+0

Также возвращать данные в порядке, просто HTTP-заголовок в сломанной, я думаю. Тесты на стороне серверов говорят, что все хорошо. –

0

Вы можете просто бросить его:

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

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

Ваш ответ NULL. Попробуйте следующее:

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

К сожалению, это не поможет. –

+0

Он будет работать, если запрос является классом NSHTTPURLResponse. – hwaxxer

+0

Как и когда вы настраиваете ответ? И какой тип класса является ответом? – hwaxxer

Смежные вопросы