Wie timeout oder erkennen, langsame Reaktion in AFHTTPSessionManager in AFNetworking?

Mit meinem code der Fehler-block feuert sofort, wenn es keine internet-Verbindung - und das ist gut so. Aber was, wenn es eine Verbindung, aber kein internet?

Ich dies gelesen habe Frage: Wie man ein timeout mit AFNetworking was darauf zu verwenden, die reachabilityManager und das Beispiel in dieser Antwort zeigt, die Nutzung - AFNetworking 2.0 Warteschlange anfordern, wenn das Gerät offline ist mit setReachabilityStatusChangeBlock nichts.

ABER, wenn mein simulator oder Telefon ist verbunden mit meinem wifi-Netzwerk, nicht aber Zugang zum internet haben (DNS -, DHCP -, oder modem-Probleme), mein code derzeit versuchen weiterhin zu erreichen, meine API für eine lange Zeit. Ich bin nicht Sie nichts herunterladen und ich weiß, dass mein Skript und mein server sollte reagieren in Sekunden, so weiß ich, dass nach 5 Sekunden der Inaktivität, ist etwas falsch.

Also kann ich das bedenkenlos tun, ein Zeitlimit, oder kann ich den reachabilityManager in meinem aktuellen Skript zu ermitteln, ob das Skript (nicht das internet) nicht erreichbar ist und wenn ja, wie?

- (void)APICall:(NSMutableDictionary*)params {

    NSURL *baseURL = [NSURL URLWithString:BaseURLString];
    NSDictionary *parametersGetAuthCode = @{@"req": @"getauth"};

    AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithBaseURL:baseURL];

    manager.responseSerializer = [AFJSONResponseSerializer serializer];
    [manager POST:APIscript parameters:parametersGetAuthCode success:^(NSURLSessionDataTask *task, id responseObject) {
        if ([task.response isKindOfClass:[NSHTTPURLResponse class]]) {
            NSHTTPURLResponse *r = (NSHTTPURLResponse *)task.response;
            if ([r statusCode] == 200) {

            //do success stuff

            }
        }
    } failure:^(NSURLSessionDataTask *task, NSError *error) {
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error" message:[error localizedDescription] delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
        [alertView show];

        //do failure stuff

    }];

}
  • "Ich weiß, dass mein Skript und mein server sollte reagieren in Sekunden" > Sie können niemals eine solche Annahme über ein mobiles Netzwerk... 3G / Edge kann echt langsam
  • Fahren Sie unter der Brücke, gehen Sie in die alten Balken unter großen Bau, und Sie können eine wirklich langsame Datenverbindung. So werden Sie blockiert den Zugriff auf Ihre Benutzer?
  • Ich weiß, ich bin auf der falschen Seite der schlechte Praxis, aber ich würde lieber meine user bekommen ein timeout und erleben Sie anschließend ungewöhnlich lange versucht mit dem server zu kommunizieren.
InformationsquelleAutor Warren | 2014-06-24
Schreibe einen Kommentar