Время ожидания запроса веб-службы iPhone - PullRequest
1 голос
/ 18 мая 2011

У меня проблемы с приложением для iPhone из-за слабых сигналов Wi-Fi.Мое приложение использует веб-сервис для удаления данных с нашего сервера, но когда сигналы Wi-Fi слабые, ответ никогда не возвращается, и пользователь застревает на экране «Загрузка ...».Наконец приложение вылетает в конце.Как я могу справиться с этой ситуацией изящно.Есть ли способ установить TimeOut для моих вызовов веб-службы или что-то вроде этого?

Спасибо, Асиф.

Ответы [ 3 ]

0 голосов
/ 18 мая 2011

попробуйте использовать ASIHTTP lib

http://allseeing -i.com / ASIHTTPRequest / Как в использовании

0 голосов
/ 18 мая 2011

Возможно, вы захотите узнать о ASIHTTPRequest , поскольку он имеет гораздо больше, чем стандартный API CFNetwork. Код прост, обработка ошибок также:

- (IBAction)grabURLInBackground:(id)sender
{
   NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
   ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
   [request setDelegate:self];
   [request startAsynchronous];
}

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

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

- (void)requestFailed:(ASIHTTPRequest *)request
{
   NSError *error = [request error];
}
0 голосов
/ 18 мая 2011

Вы можете установить время ожидания NSURLConnection и делегата для ответа на селектор connection:didFailWithError:. Смотрите это С.О. тема.

если ваш делегат никогда не вызывается, это как-то известная проблема . Единственный обходной путь, по-видимому, это установка собственного NSTimer через некоторое время и отмена запроса. Это определенно неловко, но это не должно быть так сложно.

Если вам интересно узнать причину проблемы с тайм-аутом, похоже, это связано с медленным запуском подсистемы 3G в iPhone.

...