NSURLConnection noch Anrufe Delegierten NACH der cancel-Methode aufgerufen wurde
Habe ein problem mit der NSURLConnection, wenn ich eine NSURLConnection und rufen Sie [Verbindung connectionWithRequest] lassen Sie es laden ein wenig, dann rufen Sie [Verbindung aufheben] die meisten der Zeit, funktioniert gut. Jedoch gelegentlich auch nach ich nenne [Verbindung aufheben] die Verbindung ist delegieren immer noch aufgerufen wird (was zum Absturz der app). Googeln um ihn herum aussieht, ist hier das problem einer race-condition in der runloop, brechen Sie die Verbindung und lassen Sie die Delegierten aber vor dem runloop Zyklen ruft die delegate-Funktionen -> Absturz.
Gibt es eine Möglichkeit für mich, nachdem ich call [Verbindung aufheben] bestätigen Sie die Verbindung tatsächlich abgebrochen? Selbst eine beschissene while () - Schleife tun 🙁
- Gleiche Problem hier. Beachten Sie, dass auf der Mehrzahl der Fälle
cancel
funktioniert einwandfrei, und wederconnectionDidFinishLoading
nochconnectionDidFailWithError
ist aufgerufen, die Delegierten. Sieht aus wie nichts weniger just-in-case-Erweiterung auf die Lebensdauer der delegate-Objekt kann dieses Problem lösen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie nicht lassen Sie die Verbindung & zugeordneten Speicher, bis Ihre Stellvertretung erhält entweder eine
connectionDidFinishLoading:
oder eineconnectionDidFailWithError:
Nachricht.Die Delegierten sind in der Regel nicht erhalten, indem das Objekt, das Sie sich als Delegierter für. Allerdings ist es in diesem Fall, so der Delegierte, sollte nicht ungültig werden, während die NSURLConnection ist noch darauf zu verweisen, es sei denn, Sie sind über die Freigabe es irgendwie.
Habe ich noch nicht dieses problem, aber es könnte auch funktionieren, ohne binden Sie Ihre Delegat-Objekt:
Da alle delegate-Methoden erhalten die aufrufende Connection-Objekt als parameter, und Sie wissen auch Ihren eigentlichen active-Connection-Objekt (oder null), einfach ignorieren, die delegation von Aktionen durch den Vergleich der beiden Objekte. Diese Weise einen abgebrochen "ghost" - Connection-Objekt Sie können immer noch rufen die Delegierten aber nicht stören mit Ihrer Interna.
wo
_URLConnection
ist eine Eigenschaft, die in Ihrer Stellvertretung auf eine aktive Verbindung, oder null.