Los métodos delegados de NSURLConnection no se llaman


Estoy intentando crear una simple NSURLConnection para comunicarme con un servidor usando una solicitud GET. La conexión funciona bien, pero los métodos delegados de NSURLConnection nunca son llamados..

Esto es lo que estoy haciendo:

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];

Han implementado los siguientes métodos delegados, pero ninguno de ellos es llamado..

-(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];
}

¿Me estoy perdiendo algo?

Author: visakh7, 2011-04-26

4 answers

Intenta ejecutar la operación en el hilo principal:

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

[connection scheduleInRunLoop:[NSRunLoop mainRunLoop] 
                      forMode:NSDefaultRunLoopMode];
[connection start];
 136
Author: Art,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-01 00:11:22

¿Estás llamando a esto en un hilo de fondo? Si está realizando esto en un subproceso en segundo plano, es probable que el subproceso esté saliendo antes de que se pueda llamar a los delegados.

 21
Author: visakh7,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-26 07:21:02

Trate de comprobar la longitud de la respuesta recibida que no debe obtener 0 byte de datos.

 1
Author: sanjeev sharma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-13 07:56:48

Además de comprobar si la petición es llamada desde el subproceso principal, puede comprobar si devuelve el tiempo de ejecución al sistema (si sale de "main"). Tenía algún código de prueba que permanecería en un bucle hasta que se llamara al delegado: nunca se llamaría, porque el sistema necesita hacer cosas para que se llame al delegado, en el hilo principal.

 1
Author: user3292568,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-10 11:06:03