2010-07-08 4 views
0

Riddle мне это: Я использую NSURLConnection на iPhone Simulator SDK 3.1.2 объекта выдавать несколько последовательный (не одновременно) HTTPS запросов. Все отлично работает 95% времени, но каждый так часто (возможно, около 50-100 запросов) я получаю ситуацию, когда метод делегатаNSURLConnection Преемник, без HTTP Response

- (void)connectionDidFinishLoading:(NSURLConnection *)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 [email protected]"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 { 
} 

ответ

0

Я был в состоянии решить эту проблему путем добавления делегата перенаправляет который всегда принимает

-(NSURLRequest *)connection:(NSURLConnection *)connection 
      willSendRequest:(NSURLRequest *)request 
      redirectResponse:(NSURLResponse *)redirectResponse 
{ 
    return request; 
} 

Как я понимаю, это поведение по умолчанию так что я не знаю, почему это решает проблему.

URL-адрес, по которому я отправлял запрос, сделал переадресацию, но это также не объясняет, почему HTTP-запрос работал другой ~ 95% времени.

Я надеюсь, что это поможет кому-то с аналогичной проблемой в будущем.