Alle Server-Verbindungen in meiner app die gleiche Art und Weise geht:NSURLConnection sendSynchronousRequest/sendAsynchronousRequest versagt, nachdem sie von iOS getötet App
- dispatch_async zu einem zweiten Faden.
- sendSynchronousRequest
Fehler/Erfolg blockiert auf Haupt-Thread.
Das folgende ist nicht der vollständige Code, nur das Konzept:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSURL *url = [NSURL URLWithString:@"someURL"]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; NSURLResponse *response = nil; NSError *error; NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; if (error) { dispatch_async(dispatch_get_main_queue(), ^{ _failureBlock(error); }); } else { dispatch_async(dispatch_get_main_queue(), ^{ _successBlock(data); }); });
Nun, die App funktioniert super! Ich kann es für Tausende von Serververbindungen verwenden, und es funktioniert immer, wenn ich eine neue Ladung der App ausführen. Das Problem tritt auf, wenn Folgendes eintritt:
- Senden Sie die App an BG.
- Warte einige Zeit ...
- Die App wird von iOS getötet.
- Erneut öffnen, lädt das iOS die gesamte App von Grund auf neu. (siehe Splash-Screen von dem ersten Bildschirm gefolgt, nicht die, die ich zu BG links ..)
In diesem Szenario I NSURLConnectionErrors bekommen !! Alle Arten von ihnen! Code 1003, Code 1009, Code 9 ... Nenne es einfach! Ich bekomme Fehler für alle Server-Verbindungen, die direkt beim Laden der App startet. Alle anderen Verbindungen danach funktioniert gut! einschließlich der Aktualisierung von denen, die fehlgeschlagen sind!
Es fühlt sich fast an, als würde ich versuchen, meinen Server zu schnell oder zu früh zu erreichen, ABER Ich überprüfe und überreiche einen Erreichbarkeitstest, bevor ich eine Verbindung einleite.
Konnte wirklich etwas Hilfe hier verwenden. Vielen Dank im Voraus.
UPDATE: Wie unten vorgeschlagen, versucht, sendAsynchronousRequest zu verwenden - gab mir das exakt gleiche Verhalten. (err: 1001 diesmal).
Hinzufügen von Verzögerungen ist ein bisschen flakig und ein Last-Minute-Resort. Überlegen Sie mit NSNotifications anderen Teilen Ihres Codes zu sagen, was zu tun ist, nachdem etwas fertig ist. – BlueFish