NSURLConnection didReceiveData не вызывается
Я прочитал множество сообщений, снова и снова говорящих об одном и том же: когда вы используете NSURLConnection, методы делегатаnot called, Я понимаю, что документы Apple являются неполными, и ссылочные устаревшие методы - это позор, но, похоже, я не могу найти решение.
Код для запроса есть:
// 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
});
... и код для методов делегата здесь:
- (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];
}
Здесь не так много проверок на ошибки, но я удостоверился в нескольких вещах:
Whatever happens,didReceiveData
is never called, so I don't get any data
...but the data is transfered (I checked using tcpdump
)
...and the other methods are called successfully.
If I use the NSURLConnectionDownloadDelegate
instead of NSURLConnectionDataDelegate
, everything works but I can't get a hold on the downloaded file (this is a known bug)
The request is not deallocated before completion by bad memory management
Nothing changes if I use a standard HTML page somewhere on the internet as my URL
The request is kicked off from the main queue
Я не хочу использовать стороннюю библиотеку, так как, в конечном счете, эти запросы должны быть включены в мою собственную библиотеку, и я хотел бы минимизировать зависимости. Если мне нужно, я буду использоватьCFNetwork
напрямую, но это будет огромной болью в том, что вы знаете, что.
Если у вас есть идея, это очень поможет. Спасибо!