NSURLConnection didReceiveData wurde nicht aufgerufen

Ich habe unzählige Nachrichten durchgelesen, in denen immer wieder dasselbe gesagt wird: Wenn Sie eine NSURLConnection verwenden, sind dies Delegate-Methodennicht angerufen. Ich verstehe, dass Apples Dokument unvollständig ist und veraltete Methoden referenziert, was eine Schande ist, aber ich kann anscheinend keine Lösung finden.

Code für die Anfrage ist da:

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

... und Code für die Delegate-Methoden finden Sie hier:

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

Hier wird nicht viel nach Fehlern gesucht, aber ich habe einige Dinge sichergestellt:

Was auch immer passiert,didReceiveData istnoch nie angerufen, damit ich keine Daten bekomme... aber die Daten werden übertragen (habe ich mit überprüft)tcpdump)... und die anderen Methoden werden erfolgreich aufgerufen.Wenn ich das benutzeNSURLConnectionDownloadDelegate anstattNSURLConnectionDataDelegate, alles funktioniert, aber ich kann die heruntergeladene Datei nicht festhalten (dies ist ein bekannter Fehler)Die Anforderung wird vor Abschluss durch eine fehlerhafte Speicherverwaltung nicht freigegebenEs ändert sich nichts, wenn ich irgendwo im Internet eine Standard-HTML-Seite als URL verwendeDie Anforderung wird aus der Hauptwarteschlange gestartet

Ich möchte keine Drittanbieter-Bibliothek verwenden, da diese Anforderungen letztendlich in eine eigene Bibliothek aufgenommen werden sollen und ich die Abhängigkeiten minimieren möchte. Wenn ich muss, werde ich verwendenCFNetwork direkt, aber es wird ein großer Schmerz in der Sie-wissen-was sein.

Wenn Sie eine Idee haben, würde es sehr helfen. Vielen Dank!

Antworten auf die Frage(4)

Ihre Antwort auf die Frage