NSURLConnection didReceiveData não chamado

Eu li várias mensagens dizendo a mesma coisa novamente: quando você usa uma NSURLConnection, os métodos delegados sãonão chamado. Eu entendo que doc da Apple são incompletos e referência métodos depreciados, o que é uma pena, mas não consigo encontrar uma solução.

Código para o pedido está lá:

// 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
});

... e código para os métodos delegados está aqui:

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

Não há muita verificação de erros aqui, mas tenho certeza de algumas coisas:

Aconteça o que acontecerdidReceiveData éNunca chamado, então eu não recebo nenhum dado... mas os dados são transferidos (verifiquei usandotcpdump)... e os outros métodos são chamados com sucesso.Se eu usar oNSURLConnectionDownloadDelegate ao invés deNSURLConnectionDataDelegate, tudo funciona, mas não consigo segurar o arquivo baixado (esse é um bug conhecido)A solicitação não é desalocada antes da conclusão por mau gerenciamento de memóriaNada muda se eu usar uma página HTML padrão em algum lugar da internet como meu URLO pedido é retirado da fila principal

Não quero usar uma biblioteca de terceiros, pois, em última análise, essas solicitações devem ser incluídas em uma biblioteca minha e eu gostaria de minimizar as dependências. Se eu tiver que usarCFNetwork diretamente, mas será uma dor enorme no you-know-what.

Se você tem alguma ideia, isso ajudaria muito. Obrigado!

questionAnswers(4)

yourAnswerToTheQuestion