2010-02-21 2 views
5

Я использую библиотеку ASIHTTPRequest для запроса некоторых данных с сервера в приложении для iPhone. Но я не могу понять, как создать тайм-аут, чтобы, если сервер опустился или iPhone не имеет подключения к Интернету, приложение не сработает.Тайм-аут запроса ASIHTTP

Заранее спасибо

EDIT >>>

tt.Kilew ваш код не работает ... Я отправил немного образец кода

NSURL *url = [NSURL URLWithString:@"A URL WITH A FORM"]; 
ASIFormDataRequest *requestPOST = [ASIFormDataRequest requestWithURL:url]; 
[requestPOST setPostValue:un forKey:@"username"]; 
[requestPOST setPostValue:pw forKey:@"password"];   
[requestPOST setPostValue:@"Login" forKey:@"submit"]; 
[requestPOST start]; 

[requestPOST setTimeOutSeconds:10]; 

NSLog(@"Fail: %@", [requestPOST failWithError:ASIRequestTimedOutError]); 

ответ

16
[request setTimeOutSeconds:10]; 

Обновление с более код:

NSURL *url = [NSURL URLWithString:@"A URL WITH A FORM"]; 
ASIFormDataRequest *requestPOST = [ASIFormDataRequest requestWithURL:url]; 
[requestPOST setPostValue:un forKey:@"username"]; 
[requestPOST setPostValue:pw forKey:@"password"];   
[requestPOST setPostValue:@"Login" forKey:@"submit"]; 
[requestPOST setTimeOutSeconds:10]; 
[requestPOST setDelegate:self] 
[requestPOST startAsynchronous]; 

Ошибка обработчика:

- (void)requestFailed:(ASIHTTPRequest *)request { 
    NSError *error = [request error]; 
    if ([error isKindOfClass:[ASIRequestTimedOutError class]]) { 
     // Actions specific to timeout 
    } 
} 

Успех обработчика:

- (void)requestFinished:(ASIHTTPRequest *)request 
{ 
    // Use when fetching text data 
    NSString *responseString = [request responseString]; 

    // Use when fetching binary data 
    NSData *responseData = [request responseData]; 

    // Do something with the response. 
} 
+0

Это что-то возвращает? потому что мне нужно иметь заявление как если (таймаут == TRUE) {// Некоторые сообщения об ошибке } еще { // Переходим к следующему шагу } –

+1

Это просто говорит ваш запрос, что он должен таймаут после 10 секунд. Если запрос истечет, он вызовет ваш requestFailed: delegate, который вы можете проверить для ASIRequestTimedOutError (как объясняется ниже, tt.Kilew). – chrissr

+0

Можете ли вы отправить какой-нибудь пример кода, который я не могу получить, чтобы он вообще работал –

0
// Number of seconds to wait before timing out - default is 10 
NSTimeInterval timeOutSeconds; 

Если тайм-аут произойдет, вы будете Получать

[self failWithError:ASIRequestTimedOutError]; 
+0

Это не работает, посмотрите пример кода, который я разместил, пожалуйста, –

8

Я обычно проверить, как это:

- (void)requestFailed:(ASIHTTPRequest *)request 
{  
    NSString *message = NULL; 

    NSError *error = [request error]; 
    switch ([error code]) 
    { 
     case ASIRequestTimedOutErrorType: 
      message = kAlertMsgTimeoutError; 
      break; 
     case ASIConnectionFailureErrorType: 
      message = kAlertMsgConnectionFailError; 
      break; 
     case ASIAuthenticationErrorType: 
      message = kAlertMsgAuthFailError; 
      break; 
     case ASITooMuchRedirectionErrorType: 
      message = kAlertMsgTooManyRedirect; 
      break; 
     case ASIRequestCancelledErrorType: 
      message = kAlertMsgReqCancelledError; 
      break; 
     case ASIUnableToCreateRequestErrorType: 
      message = kAlertMsgUnableCreateReqError; 
      break; 
     case ASIInternalErrorWhileBuildingRequestType: 
      message = kAlertMsgUnableBuildReqError; 
      break; 
     case ASIInternalErrorWhileApplyingCredentialsType: 
      message = kAlertMsgUnableApplyCredError; 
      break; 
     case ASIFileManagementError: 
      message = kAlertMsgFileManageError; 
      break; 
     case ASIUnhandledExceptionError: 
      message = kAlertMsgUnhandledExcepError; 
      break; 
     case ASICompressionError: 
      message = kAlertMsgCompressionError; 
      break; 
     default: 
      message = kAlertMsgGenericError; 
      break; 
    } 

    if (NULL != message) 
    { 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:kApplicationTitle 
                 message:message 
                 delegate:self 
               cancelButtonTitle:kAlertDefaultCancel 
               otherButtonTitles:nil]; 
     [alert show]; 
    } 
} 
+0

, который класс i хочу добавить для этого метода ??? –

+0

Спасибо за это, он отлично работает. – AndyGable

Смежные вопросы