Тайм-аут запроса ASIHTTP - PullRequest
       27

Тайм-аут запроса ASIHTTP

5 голосов
/ 21 февраля 2010

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

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

РЕДАКТИРОВАТЬ >>>

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]);

Ответы [ 3 ]

16 голосов
/ 21 февраля 2010
[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.
}
8 голосов
/ 05 ноября 2011

Я обычно проверяю так:

- (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 голосов
/ 21 февраля 2010
// Number of seconds to wait before timing out - default is 10
NSTimeInterval timeOutSeconds;

Если истечет время ожидания, вы получите

[self failWithError:ASIRequestTimedOutError];
...