2013-03-20 4 views
5

대개 간단한 질문이지만 완료 블록은 항상 을 사용하여 호출 할 예정입니까? 또는 시간 초과 타이머를 구현해야합니까?[NSURLConnection sendAsynchronousRequest : ...] 항상 완료 블록을 보냅니 까?

[self showHUDWithTitle:@"Configuring"]; 
[NSURLConnection sendAsynchronousRequest:request 
            queue:[[NSOperationQueue alloc] init] 
         completionHandler:^(NSURLResponse *response, 
              NSData *data, 
              NSError *error) { 

    if ([data length] >0 && error == nil) { 
     [self hideHUDWithFlag:YES 
         andTitle:@"Finished" 
        andSubtitle:@"(Box was configured)"]; 

    } else if ([data length] == 0 && error == nil) { 
     [self hideHUDWithFlag:NO 
         andTitle:@"Failed" 
        andSubtitle:@"(Check box connection)"]; 
     NSLog(@"Nothing was downloaded."); 

    } else if (error != nil) { 
     [self hideHUDWithFlag:NO 
        andTitle:@"Error" 
        andSubtitle:@"(Check box connection)"]; 
     NSLog(@"Error = %@", error); 
    } 
}]; 
+0

자연스럽게. 완료 핸들러는 성공 핸들러가 아닌 COMPLETION 핸들러입니다. D –

+0

@ Daij-Djan 저는 성공 처리자이지 완성을 완료 한 완성자가 아닙니다! – Groot

+1

if (! error) = 성공 : D –

답변

15

예, 완료 처리기가 항상 호출됩니다. 시간 제한으로 인해 요청이 실패하면 error이 설정되고 data = nil이 설정됩니다.

NSURLRequest의 기본 시간 제한은 60 초이지만 연결을 시작하기 전에 request.timeoutInverval에 다른 값을 할당 할 수 있습니다. 그래서 여분의 타이머가 필요 없습니다.

추가 : 타임 아웃의 경우 :

  • [error domain]NSURLErrorDomain이며,
  • [error code]NSURLErrorTimedOut이며,

그냥 오류 메시지를 제공하려는 경우, 당신을 [error localizedDescription]을 사용할 수 있습니다. "요청 시간이 초과되었습니다." 이 경우에. (지역에 따라 다를 수 있습니다.)

+0

좋은 답변, 고마워! – Groot

+0

@Filip : 천만에. 타임 아웃을 확인하는 방법에 대한 정보를 추가했습니다. –

0

[있는 NSURLConnection sendAsynchronousRequest : ...] 확실히 어떤 시나리오에서 완료 블록을 호출 난 단지 완료 블록에서 호출하기 전에 MBProgressView을 추가하고 제거 곳

는 다음을 고려하십시오. 그러나이 프로세스를 최대 시간으로 제한하려면 제한 시간 타이머를 사용할 수도 있습니다.

진행률 표시 줄의 경우 어떻게 값을 증가 시킵니까? 진행률 표시 줄 대신 활동 표시기를 사용하는 것이 좋습니다.

희망이 도움이됩니다.

2
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url 
               cachePolicy:NSURLCacheStorageAllowed    
              timeoutInterval:20]; 
+2

당신이 한 일과 그 이유를 설명해주십시오. 사람들은 코드 전용 답변으로 거의 배우지 않습니다. – Jasper

관련 문제