Question

So I'm trying to do all my REST calls that download data on the background thread so that the UI stays responsive.

I have a viewcontroller that contains a NSOperationQueue. I create an instance of my importer class that is a subclass of NSOperation. Inside the main() method of my importer, I am setting up a ASIHTTPDataRequest. I create the request, then its time to kick off the request.

Problem: I ran into a problem when starting the request by calling "startAsynchronous" on the request. The delegate call backs never get called. Its like the request starts, downloads its data, but never calls the delegate callback methods.

My solution: Everything seems to work fine (i.e. callbacks, etc) when I start the request synchronously. Is this the correct solution?

Why does the synchronous call work, but not the asynchronous? I'm modeling my importer class after Apples "TopSongs" sample.

Was it helpful?

Solution

When the method main() is end executing, NSOperation seted to finished and released, so you newer receive delegate callbacks because delegate is released.

OTHER TIPS

ASIHTTPRequest itself should not block the UI if you run it from the main thread.

  • ASIHTTPRequest isn't designed to be run from a background thread. [ASIHTTPRequest requestFinished] calls the "finished" callback on the main thread; it'll never be received by the background thread, so the background thread's run loop never runs.
  • ASIHTTPRequest is an NSOperation anyway. This is an implementation detail.
  • ASIHTTPRequest runs its network code in a background thread by default, so you're unlikely to see much benefit by sticking it in another thread.

If it's parsing the data that's taking a long time, stick that in an operation.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top