Время ожидания запроса 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];
}

Ответы на вопрос(0)

Ваш ответ на вопрос