Методы делегата NSURLConnection не вызываются - PullRequest
56 голосов
/ 26 апреля 2011

Я пытаюсь создать простое 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];
}

Я что-то упустил?

Ответы [ 4 ]

136 голосов
/ 10 января 2012

Попробуйте запустить операцию в основном потоке:

NSURLConnection * connection = [[NSURLConnection alloc] 
                                initWithRequest:request
                                       delegate:self startImmediately:NO];

[connection scheduleInRunLoop:[NSRunLoop mainRunLoop] 
                      forMode:NSDefaultRunLoopMode];
[connection start];
22 голосов
/ 26 апреля 2011

Вы вызываете это в фоновом потоке? Если вы выполняете это в фоновом потоке, поток, вероятно, завершается до вызова делегатов.

1 голос
/ 10 февраля 2014

Помимо проверки, вызван ли запрос из основного потока, вы можете проверить, возвращаете ли вы время выполнения системе (если вы выходите из "main"). У меня был некоторый тестовый код, который оставался бы в цикле, пока не был вызван делегат: он никогда не был бы вызван, потому что системе нужно что-то делать для вызова делегата в главном потоке.

1 голос
/ 13 августа 2012

Попробуйте проверить длину полученного ответа: он не должен получать 0 байт данных.

...