Время ожидания запроса ASIHTTPRequest
Я давно работаю над этим вопросом и не знаю, как поступить, пытаясь решить его.
У меня есть простой ASIHTTPRequest. Код размещен ниже.
Приложение всегда работает при первом запуске. У меня есть табличное представление, которое я могу обновить, чтобы инициировать ASIHTTPRequest, и я могу обновлять столько раз, сколько захочу, без проблем. Я могу отправить приложение на задний план и вернуть его обратно, и все работает нормально. Но если я оставляю приложение на несколько часов и возвращаюсь, иногда я получаю сообщение об ошибке тайм-аута запроса. Как только это происходит, ошибка будет повторяться каждый раз, когда я пытаюсь обновиться, и я никогда не смогу подключиться снова, фактически не закрывая приложение и не перезапуская его.
Я не верю, что проблема связана с моим URL, потому что он может застрять на одном устройстве, в то время как нормально на другом устройстве. Мне никогда не удавалось получить ошибку тайм-аута на симуляторе.
Я могу себе представить, почему я могу получить ошибку тайм-аута один раз, но я не могу понять, почему после ее запуска ошибка никогда не прекращается. Я действительно понятия не имею, где искать, чтобы попытаться это исправить, или как я мог бы отладить это.
Может быть уместно отметить, что в настоящее время я использую TestFlightLive, GoogleAnalytics и Urban Airship в своем приложении. Возможно, одна из этих библиотек вызывает проблемы с моим сетевым поведением?
Вот код:
- (void)getData
{
NSURL *url = [NSURL URLWithString:@"http://www.mysite.com/appname/latestData.py?callback=?"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDelegate:self];
[request setTimeOutSeconds:20.0];
[request startAsynchronous];
}
- (void)requestFinished:(ASIHTTPRequest *)request
{
NSData *responseData = [request responseData];
DLog(@"requestFinished entered");
NSString *dataString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
// Update the data model
if (dataString != nil)
{
SBJsonParser *jsonParser = [[SBJsonParser alloc] init];
NSDictionary *dataDictionary = [jsonParser objectWithString:dataString error:NULL];
[self updateDataModel:dataDictionary];
}
[self refreshIsFinished];
}
- (void)requestFailed:(ASIHTTPRequest *)request
{
NSError *error = [request error];
// inform the user
ELog(@"Connection failed! Error - %@ %@",
[error localizedDescription],
[[error userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]);
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil
message:NSLocalizedString(@"CONNECTION_FAILED_MESSAGE",nil)
delegate:nil
cancelButtonTitle:NSLocalizedString(@"CLOSE",nil)
otherButtonTitles:nil];
[alertView show];
[self updateUI];
[self refreshIsFinished];
}