Загадка для меня: Я использую NSURLConnection на iPhone Simulator SDK 3.1.2 для выдачи нескольких последовательных (не одновременных) запросов https.Все работает нормально в 95% случаев, но время от времени (возможно, около 50-100 запросов) я получаю ситуацию, когда метод делегата
- (void)connectionDidFinishLoading:(NSURLConnection *)connection;
вызывается после [start connection], но без какого-либо вызова метода делегата
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
Я сократил проблему до приведенного ниже источника.Из того, что я понимаю, это нарушает контракт определенного поведения NSURLConnection.Кто-нибудь еще имел эту проблему, и это известная ошибка, или я использую NSURLConnection неправильно?
static BOOL hasSeenResponse = NO;
//Create a NSURLConnection and start it
-(void) begin {
NSURL* url = [NSURL URLWithString@"https://some.domain.com/some/path/?some=query"];
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyNever];
NSURLRequest* request = [NSURLRequest requestWithURL:url];
if ([NSURLConnection canHandleRequest:request]) {
NSURLConnection* connection = [[NSURLConnection connectionWithRequest:request delegate:self] retain];
hasSeenResponse = NO;
[connection start];
}
}
#pragma mark NSURLConnection Delegate Methods
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
if (!hasSeenResponse) {
NSLog(@"\n\nNo Response Recieved\n");
}
[connection release];
[self begin];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
[connection release];
[self begin];
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
hasSeenResponse = YES;
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
}