Zeitüberschreitung bei ASIHTTPRequest-Anforderung

Ich habe lange an diesem Problem gearbeitet und bin mir nicht sicher, wie ich vorgehen soll, um es zu lösen.

Ich habe eine einfache ASIHTTPRequest. Der Code ist unten angegeben.

Die App funktioniert immer, wenn ich sie zum ersten Mal starte. Ich habe eine Tabellenansicht, die ich zum Aktualisieren ziehen kann, wodurch die ASIHTTPRequest ausgelöst wird, und ich kann so oft aktualisieren, wie ich möchte, ohne ein Problem zu haben. Ich kann die App in den Hintergrund schicken und zurückbringen, und alles funktioniert einwandfrei. Aber wenn ich die App für einige Stunden verlasse und zurückkomme, bekomme ich manchmal eine Fehlermeldung, dass das Zeitlimit überschritten ist. In diesem Fall wird der Fehler jedes Mal wiederholt, wenn ich versuche, eine Aktualisierung durchzuführen, und ich kann keine Verbindung mehr herstellen, ohne die App tatsächlich herunterzufahren und neu zu starten.

Ich glaube nicht, dass das Problem an meiner URL liegt, da sie auf einem Gerät stecken bleiben kann, während sie auf einem anderen Gerät in Ordnung ist. Ich habe noch nie einen Timeout-Fehler im Simulator festgestellt.

Ich kann mir vorstellen, warum ich den Timeout-Fehler einmal bekomme, aber ich kann nicht verstehen, warum der Fehler nach dem Start niemals aufhört. Ich habe wirklich keine Ahnung, wo ich nachsehen soll, um dies zu beheben, oder wie ich das Debuggen durchführen könnte.

Es könnte relevant sein, zu beachten, dass ich derzeit TestFlightLive, GoogleAnalytics und Urban Airship in meiner App verwende. Vielleicht verursacht eine dieser Bibliotheken ein Problem mit meinem Netzwerkverhalten?

Hier ist der Code:

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

Antworten auf die Frage(0)

Ihre Antwort auf die Frage