NSURLConnection didReceiveData no llamado

He leído toneladas de mensajes que dicen lo mismo una y otra vez: cuando usas una conexión NSURLC, los métodos de delegado sonno llamado. Entiendo que los documentos de Apple son incompletos y hacen referencia a métodos obsoletos, lo cual es una pena, pero parece que no puedo encontrar una solución.

El código para la solicitud está allí:

// Create request
NSURL *urlObj = [NSURL URLWithString:url];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:urlObj cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30];
[request setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"];

if (![NSURLConnection canHandleRequest:request]) {
    NSLog(@"Can't handle request...");
    return;
}

// Start connection
dispatch_async(dispatch_get_main_queue(), ^{
    self.connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES]; // Edited
});

... y el código para los métodos de delegado está aquí:

- (void) connection:(NSURLConnection *)_connection didReceiveResponse:(NSURLResponse *)response {
    NSLog(@"Receiving response: %@, status %d", [(NSHTTPURLResponse*)response allHeaderFields], [(NSHTTPURLResponse*) response statusCode]);
    self.data = [NSMutableData data];
}

- (void) connection:(NSURLConnection *)_connection didFailWithError:(NSError *)error {
    NSLog(@"Connection failed: %@", error);
    [self _finish];
}

- (void) connection:(NSURLConnection *)_connection didReceiveData:(NSData *)_data {
    [data appendData:_data];
}

- (void)connectionDidFinishDownloading:(NSURLConnection *)_connection destinationURL:(NSURL *) destinationURL {
    NSLog(@"Connection done!");
    [self _finish];
}

No hay muchos errores de comprobación aquí, pero me he asegurado de algunas cosas:

Pase lo que pase,didReceiveData esNunca Llamé, así que no consigo ningún dato.... pero los datos son transferidos (lo verifiqué usandotcpdump)... y los otros métodos se llaman con éxito.Si uso elNSURLConnectionDownloadDelegate en lugar deNSURLConnectionDataDelegate, todo funciona, pero no puedo retener el archivo descargado (se trata de un error conocido)La solicitud no se desasigna antes de que sea completada por una mala gestión de la memoriaNada cambia si utilizo una página HTML estándar en algún lugar de Internet como mi URLLa solicitud se inicia desde la cola principal.

No quiero usar una biblioteca de terceros, ya que, en última instancia, estas solicitudes se incluirán en una biblioteca propia, y me gustaría minimizar las dependencias. Si tengo que, lo usaréCFNetwork directamente, pero será un gran dolor en el que sabes qué.

Si tienes alguna idea, sería de gran ayuda. ¡Gracias!

Respuestas a la pregunta(4)

Su respuesta a la pregunta