I’m running an http request with my view controller as the delegate using ASIHTTP, if the user leaves the view controller before the request is done, I get a EXC_BAD_ACCESS in the ASIHTTP code that is doing an if ( delegate … )
Is there something I have to do in my view controller dealloc? I want to simply drop the request if the user leaves.
The most common reason for problems like this is an ASIHTTPRequest object that is still active and where its delegate field points at an object that is now destroyed. The EXC_BAD_ACCESS will then happen when ASIHTTPRequest tries to tell the delegate the request has finished and so on.
Your dealloc method for the object that is the asihttprequest delegate should have:
If you have only one request active at a time, you must have this same code anywhere you start a new request, to ensure that any previous request is correctly cancelled.
If you have more than one request active, you will need to keep track of all of them, and cancel and nil the delegate of all of them.
For reference, I’ve been using ASIHTTPRequest for ~18 months, and have contributed back a number of fixes for difficult race conditions related to cancelling requests.