Методы делегата 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];
}
Я что-то пропустила?
4 ответа:
попробуйте запустить операцию в основном потоке:
NSURLConnection * connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO]; [connection scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode]; [connection start];
вы вызываете это в фоновом потоке? Если вы выполняете это в фоновом потоке, поток, вероятно, выходит до того, как делегаты могут быть вызваны.
помимо проверки, вызывается ли запрос из основного потока, вы можете проверить, возвращаете ли вы время выполнения системе (если вы выходите из "main"). У меня был некоторый тестовый код, который будет оставаться в цикле до тех пор, пока делегат не будет вызван : он никогда не будет вызван, потому что система должна делать что-то для вызова делегата в главном потоке.