2012-04-14 11 views
4

Ich habe ein Problem, das ist unglaublich schwer zu debuggen. Wenn meine App WiFi verwendet und sie ungefähr 30 Minuten im Leerlauf ist, reagiert die NSURLConnection manchmal nicht mehr, wenn ich sie aufwecke. Anfragen werden gesendet, kehren aber nie zurück.iPhone App verliert Internet-Verbindung (NSURLConnection nicht zurück)

Zuerst dachte ich, dies sei ein Speicherfehler, da die Instanzen zu früh freigegeben wurden und daher nie eine Antwort zurückgaben. Allerdings, wenn ich die App in den Hintergrund, gehen Sie in Einstellungen, WLAN ausschalten, so dass 3G ausschließlich verwendet wird, und zur App zurückkehren, kommt die Internetverbindung magisch wieder zum Leben und alle ausstehenden NSURLConnection s zurück und fertig.

Offensichtlich ist dies ein Problem für Menschen mit WiFi. Ist das wirklich ein WLAN-Problem, oder fehlt mir etwas? Wenn Sie zu einer anderen App wie Safari gehen, das WLAN-Radio verwenden und zu meiner App zurückkehren, wird das Problem nicht gelöst - Verbindungen werden immer noch nicht wiederhergestellt. Ich habe das mit Xcode verfolgt und mir gehen die Ideen aus.

Auch die Info.plist-Markierung "Application uses WiFi" ist auf ON gesetzt und dies ist Firmware 5.1. ist "Anwendung nutzt WiFi" die gleiche wie UIRequiresPersistentWiFi?

Update: Das hat nichts mit der Wifi-Flagge zu tun - es kann innerhalb von 5 Minuten sterben. Bis jetzt konnte ich es nur auf meinem iPhone 4s mit 5.1 Firmware duplizieren. Es ist nicht wirklich eine Lösung, aber ich lösche das Telefon, um es mit einer neuen Installation zu versuchen, um zu sehen, ob das irgendwelche Auswirkungen hat. Ich habe überprüft, dass NSURLConnection immer am Haupt-Thread aufgerufen wird, und Haltepunkte bei connection:failedWithError: und connection:didReceiveResponse: festlegen. Wenn die Verbindung abbricht, kehrt keiner zurück, bis ich das WiFi deaktiviere und wieder aktiviere und dann alle sofort zurückkehre. Dies geschieht auch auf einem lokalen Server, und der Server kehrt immer noch zurück, wenn ich ihn mit einem Webbrowser anpinge.

+1

Haben Sie versucht, die 'UIRequiresPersistentWiFi' Flag gesetzt? – esqew

+0

Ich denke schon - "Anwendung nutzt WiFi" ist in der pList-Datei aktiviert. –

+0

Blockieren Sie versehentlich den Haupt-Thread? Haben Sie synchrone NSURLConnections in einem Hintergrundthread verwendet? – magma

Antwort

0

Senden/empfangen Sie tatsächlich Daten über die NSURLConnection? Wenn nicht, ist es möglich, dass Sie eine TCP-Sitzung abbrechen? Scheint unwahrscheinlich, wenn das Problem auf einem lokalen Server weiterhin besteht, aber ein intervenierender statusbehafteter Firewall-/Paket-Inspektor wirft möglicherweise Ihre TCP-Verbindung ab.

+0

Ich dachte, dass es möglich ist, dass ich die NSURLConnection irgendwie nicht in bestimmten Fällen übergebe, da ich Unterklassen bin. Ich werde es mir ansehen. Vielleicht kann das Testen ohne Subclassing das Problem beheben. Danke für den Vorschlag. –