2010-02-21 13 views
5

iPhone uygulamamdaki bir sunucudan bazı veriler istemek için ASIHTTPRequest kitaplığını kullanıyorum. Ancak bir zaman aşımı nasıl oluşturacağımı anlayamıyorum, böylece sunucu kapanırsa veya iPhone internet bağlantısına sahip değilse uygulamanın çökmesi engellenir. peşinBir ASIHTTP isteği zaman aşımı

Teşekkür

DÜZENLEME >>> fazlası ile

kodunuzu çalışmıyor ... Ben örnek kod biraz yayınlanmıştır 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]); 

cevap

16
[request setTimeOutSeconds:10]; 

Güncelleme kodu:

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

Başarısız işleyici:

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

Başarı işleyicisi: Zaman aşımı meydana gelecektir Eğer

- (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

Bu bir şey mi veriyor? i gibi bir ifade olması gerekir, çünkü başka (zaman aşımı == true) { // Bazı hata mesajı } sadece 10 saniye sonra zaman aşımına gerekir isteğinizi söyler –

+1

{ // sonraki adıma geçin} eğer. İstek zaman aşımına uğrarsa, isteğinizi arayacaktırFailed: ASIRequestTimedOutError (aşağıdaki tt.Kilew tarafından açıklandığı gibi) için kontrol edebileceğiniz bir temsilci. – chrissr

+0

Lütfen bazı örnek kodları gönderebilir miyim? Bunu hiç işe alamıyorum –

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

, sen

[self failWithError:ASIRequestTimedOutError]; 
+0

Bu yazılan örnek kodlara bakmayın lütfen yayınladım –

8

alma edeceğiz Normalde böyle kontrol edin:

- (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

Bu yöntem için eklemek istiyorum ????? –

+0

Bunun için teşekkürler, harika çalışıyor. – AndyGable