NSURLConnection sendSynchronousRequest - hintergrund in den Vordergrund
Ich m mit sendSynchronousRequest, um die Daten vom server. Ich weiß, dass synchrone werde warten, bis die empfangenen Daten für diese Anfrage.
Aber das problem kommt, wenn Benutzer versehentlich betritt einige nicht vorhandene url und als versucht, um eine Reaktion zu erhalten. In diesem Fall, wenn der Benutzer geht in den hintergrund und kommt in den Vordergrund-es wird nur ein schwarzer Bildschirm. Es zeigt nur status-bar. Auch seine nicht zeigen keine Anwendung im hintergrund. Ich habe an drücken Sie Home-Taste, um aus meiner Anwendung.
Auf dem simulator, Nach 1+ minute zeigt er mir die Meldung, dass "Request time out" (Kein Absturz).
Auf dem Gerät, innerhalb von 1 min Anwendung abstürzt.
Jede Anregung. Jegliche Hilfe. Das ist wirklich ein ernsthaftes Problem in meiner app.
Dank.
nach einigen crash-log bitte.
InformationsquelleAutor JiteshW | 2011-11-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Genau wie Julien sagte, der watchdog ist das töten Ihrer app. Einige Fragen zu beantworten:
Weil, wenn Sie das Debuggen der watchdog macht die app allein kann es einige Zeit dauern.
Weil der system-timeout, das system wird weiterhin versuchen, für 60 Sekunden, wenn Sie nicht finden können, ein server.
Nein, das problem ist das Gewinde, die Sie tun können, die gleiche operation in einem hintergrund-thread, tun Sie es gerade nicht auf dem Haupt-thread und den watchdog-Sie allein lassen.
Denken Sie daran, Sie machen die Blockierung Zeug auf dem Haupt-thread, der thread zieht...
Hoffe, das war alles. Lassen Sie mich wissen, wenn ich etwas verpasst.
InformationsquelleAutor fbernardo
Warum nicht die Einstellung timeout für die Verbindung?
Dieser sollte kurz die synchrone warten nach einer Anzahl von Sekunden, die sollte dein problem lösen, ohne mit einem asynchronen Aufruf (die manchmal nicht die richtige Lösung)
Ich weiß, das funktioniert, weil das ist, wie ich prüfen, ob ich verbunden bin, zu einem bestimmten VPN (wo Erreichbarkeit flags Total fail).
InformationsquelleAutor suprandr
sollten Sie einen Blick auf diese Artikel: https://developer.apple.com/library/ios/#qa/qa1693/_index.html
iOs enthält eine watchdog, wenn Ihre Anwendung ist gesperrt, zu viel Zeit auf einen Vorgang auf der Haupt-thread, dieser wird getötet werden. (für mehr details über Watchdog: http://en.wikipedia.org/wiki/Watchdog_timer)
Also, wenn Sie wollen, um etwas herunterladen, herunterladen nicht auf dem main-thread.
Ich glaube nicht, dass er Sinn synchrone Verbindung auf der main-thread für die login-action. Es sollte besser sein, um es zu starten ungleichzeitigkeiten, eine Aktivität anzeigen Anzeige, und deaktivieren Sie Benutzer-Interaktion. Ich schlage vor, Sie erstellen eine login-Klasse, die eine Methode mit einem Abschluss-handler-block. (wenn Sie möchten ein Beispiel sehen Sie die TWRequest Klasse verfügbar in iOs 5)
InformationsquelleAutor Julien
BEZIEHEN
InformationsquelleAutor Chigs79
verwenden ASIHttpRequest-Klasse anstelle von NSURLConnection , die nichts, aber wrapper für NSURLConnection und hat eine sehr einfache Rückrufe , können Sie außerdem die Zeit für das ausfüllen eines Anfrage. Gehen Sie bitte über diesen link für mehr info http://allseeing-i.com/ASIHTTPRequest/
ASIHttpRequest nicht verwenden NSURLConnection überhaupt. Auch ASIHttpRequest ist nicht mehr unter aktiver Entwicklung.
InformationsquelleAutor santosh
Ich denke, Sie zuerst zu testen, user-Daten, ob es korrekt ist oder nicht, und dann nur, wenn es richtig ist, sendet die Anfrage sonst wird der Benutzer aufgefordert, "bitte geben Sie korrekte Daten"...
oder
wenn Ihr das Parsen von Daten in Reaktion fehlgeschlagen. Sie können auch Protokoll delegate-Methode, die ich.e FinishWithError, so dass Sie kommen mit Ihrem letzten UI.
InformationsquelleAutor Nishant Mahajan
Versuchen, diese:
Das könnte Ihnen helfen: ich bin außerdem laden eine Reihe von Bildern gleichzeitig, sodass die Bilder, die haben keine richtige Daten zeigen einen schwarzen Bildschirm. Um dies zu vermeiden, versuchen Sie, ändern Sie die Größe der Bildansicht.
InformationsquelleAutor Rohit Wankhede
Könnten Sie überprüfen die Erreichbarkeit der URL vor dem starten der Anfrage.
Apple hat
Reachability
Methoden, dies zu tun. Aber es ist einfacher einen wrapper verwenden. E. g.ASIReachability
.InformationsquelleAutor calimarkus
Ich glaube, dass die Anwendung abstürzt, weil Sie nicht alle Daten, wenn Benutzer falsche
URL
und Sie sind mit dieser 'zurückgegeben'nil
NSData
zu tun stopft.Ich denke, das wird dein problem lösen
InformationsquelleAutor rakeshNS