Методы делегатов NSURLConnection не называются
Я пытаюсь создать простой NSURLConnection для связи с сервером с использованием запроса GET. Соединение работает хорошо, но делегирует методы NSURLConnection никогда не вызывается..
Вот что я делаю:
NSString *post = [NSString stringWithFormat:@"key1=%@&key2=%@&key3=%f&key4=%@", val1, val4, val3, val4];
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease] ;
[request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://www.domain.com/demo/name/file.php?%@", post]]];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[connection start];
Внедрены следующие методы делегата, но ни один из них не вызывается..
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
NSLog(@"did fail");
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
NSLog(@"did receive data");
}
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
NSLog(@"did receive response ");
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
NSLog(@"did finish loading");
[connection release];
}
Я что-то пропустил?
Ответы
Ответ 1
Попробуйте запустить операцию в основном потоке:
NSURLConnection * connection = [[NSURLConnection alloc]
initWithRequest:request
delegate:self startImmediately:NO];
[connection scheduleInRunLoop:[NSRunLoop mainRunLoop]
forMode:NSDefaultRunLoopMode];
[connection start];
Ответ 2
Вы называете это фоновым потоком? Если вы выполняете это в фоновом потоке, поток, вероятно, выходит до того, как делегаты могут быть вызваны.
Ответ 3
Попробуйте проверить длину полученного ответа, он не должен получать 0 байт данных.
Ответ 4
Помимо проверки того, вызван ли запрос из основного потока, вы можете проверить, вернули ли вы время выполнения системы (если вы выйдете из "основного" ).
У меня был некоторый тестовый код, который оставался бы в цикле до тех пор, пока не будет вызван делегат: он никогда не будет вызван, потому что системе нужно делать вещи, чтобы делегат вызывался в основном потоке.