ASIHTTPRequest solicitud de tiempo de espera

He estado trabajando en este tema durante mucho tiempo, y no estoy seguro de cómo proceder tratando de resolverlo.

Tengo una solicitud ASIHTTP simple. El código se publica a continuación.

La aplicación siempre funciona cuando la ejecuto por primera vez. Tengo una vista de tabla que puedo extraer para actualizar, lo que inicia el ASIHTTPRequest, y puedo actualizar tantas veces como quiera sin problema. Puedo enviar la aplicación al fondo y traerla de vuelta y todo funciona bien. Pero si dejo la aplicación por varias horas y vuelvo, a veces comenzaré a recibir un error de tiempo de espera de solicitud. Una vez que esto ocurre, el error se repetirá cada vez que intente actualizar y nunca podré volver a conectarme sin cerrar la aplicación y reiniciarla.

No creo que el problema esté en mi url, ya que se puede atascar en un dispositivo mientras está bien en otro dispositivo. Nunca he podido obtener el error de tiempo de espera en el simulador.

Puedo imaginar por qué podría obtener el error de tiempo de espera una vez, pero no puedo entender por qué una vez que se inicia, el error nunca se detiene. Realmente no tengo idea de dónde buscar para tratar de solucionar este problema, ni de cómo podría solucionarlo.

Podría ser relevante tener en cuenta que actualmente estoy usando TestFlightLive, GoogleAnalytics y Urban Airship en mi aplicación. ¿Quizás una de estas bibliotecas está causando un problema con mi comportamiento de red?

Aquí está el código:

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

Respuestas a la pregunta(0)

Su respuesta a la pregunta