Как может connectionDidFinishLoading: работать, если на сервере не найдено ни одного файла?
Возможный дубликат:
Тестирование использования NSURLConnection со статусами ошибок ответа HTTP
Это странно; У меня есть асинхронное соединение, например, так:
NSString *url=[NSString stringWithFormat:@"http://www.whatever.com/file"];
NSURL *url2=[NSURL URLWithString:url];
NSURLRequest *req=[[NSURLRequest alloc] initWithURL:url2];
NSURLConnection*con=[[NSURLConnection alloc] initWithRequest:req delegate:self];
[req release];
if(con){
NSMutableData *data=[[NSMutableData alloc] init];
self.receivedData=data;
[data release];
}
else {
UIAlertView*alert=[[UIAlertView alloc] initWithTitle:@"Error!" message:@"Unable to connect to server." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
}
Тогда у меня есть несколько стандартных методов делегата:
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
[receivedData setLength:0];
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
[receivedData appendData:data];
}
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
[connection release];
self.receivedData=nil;
UIAlertView*alert=[[UIAlertView alloc] initWithTitle:@"This app requires Internet" message:[NSString stringWithFormat: @"Connection failed.\n Please exit and check your\nInternet access."] delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
[alert show];
[alert release];
}
-(void) connectionDidFinishLoading:(NSURLConnection *)connection{
NSString *payload=[[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding];
self.downloaded=nil;
self.downloaded=payload;
[payload release];
[connection release];
self.receivedData=nil;
NSLog(@"This will display if connectionDidFinishLoading runs.");
}
NSLog там в конце работает, даже если файл не на сервере. Зачем? Я не ожидал бы, что это загрузило что-нибудь, и вместо этого привело бы к ошибке и представлению предупреждения.
Эти методы на первый взгляд кажутся понятными, но здесь должно быть что-то, что я не понимаю в асинхронном соединении.
1 ответ
Решение
Это закончило загрузку. Факт, что это закончилось с ошибкой HTTP, не имеет значения.
Объект NSHTTPResponse, который вы получили в didReceiveResponse, будет иметь .responseCode
собственность с 404 в нем.