ASIHTTPRequest в iOS

#iphone #objective-c #asihttprequest

#iPhone #objective-c #asihttprequest

Вопрос:

Я использовал ASIHTTPRequest для приложения, но это выдает мне ошибку в topSecretFetchFailed методе 5 из 10 запросов, не уверен, как с этим справиться, недостаточно ASIHTTPRequest стабилен?

 [request setDidFailSelector:@selector(topSecretFetchFailed:)]; 
  

Редактировать:

Это мой код или метод, который вызывается при каждом запросе. MARKET_INDEXES_URL — это статическая строка, которая имеет «someurl.com «;

 - (void)requestData { 
   ASIHTTPRequest *req = [ASIHTTPRequest requestWithURL:[NSURLURLWithString:MARKET_INDEXES_URL]];
   [req setDelegate:self]; 
   [req setDidFailSelector:@selector(topSecretFetchFailed:)]; 
   [req setDidFinishSelector:@selector(topSecretFetchComplete:)]; 
   [self setRequest:req]; 
   [self.request startAsynchronous]; 
}
  

и это обработчик сбоя

 - (void)topSecretFetchFailed:(ASIHTTPRequest *)theRequest { 
   [[NSNotificationCenter defaultCenter] postNotificationName:@"MarketIndexesError" object:nil]; 
   UIAlertView *view = [[UIAlertView alloc] initWithTitle:@"Warning !" message:@"Connection error, Please try again" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];   
  [view show]; 
  [view release]; 
  NSLog(@"MarketIndex service Fail: %d %@", [theRequest responseStatusCode], [theRequest responseStatusMessage]); 
} 
  

Ответ №1:

Что вам нужно, так это некоторые сведения об ответе. Без этого вы проводите диагностику в темноте. Поместите это в свой обработчик сбоев:

 NSLog(@"Fail: %d %@", [request responseStatusCode], [request responseStatusMessage]);
  

Комментарии:

1. @Dan Я получаю statuscode = 0 и statusmessage = null в моем обработчике сбоев, не уверен, что происходит.

2. Сделай мне одолжение и добавь это в качестве «редактирования» в свой исходный вопрос, чтобы код был читабельным.

3. @Dan Извини, чувак, я должен был сделать это в первый раз, теперь это отредактировано, пожалуйста, взгляни.

4. Я предполагаю, что делегат ASIHTTPRequest вызывается, когда ваш запрос на URL завершен или произошел сбой. Разве это не правда?

Ответ №2:

ASIHTTPRequest работает стабильно. Вероятно, вы получаете сообщение об ошибке, потому что либо ваша сеть не работает, либо вашему серверу требуется слишком много времени для ответа.

Вам следует попробовать изменить свойство ASIHTTPRequest numberOfTimesToRetryOnTimeout на то, что вам подходит.

 ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:....
request.numberOfTimesToRetryOnTimeout=10;
  

Комментарии:

1. спасибо за ваш ответ, моя сеть очень стабильна. Мне нужно попробовать с этим свойством.