Search code examples
objective-ccocoaxcodeasihttprequest

Objective-C & ASIHTTPRequest return values


I am using ASIHTTPRequest in an Objective-C Mac application. I am creating a class that accesses a web service's public API (via ASIHTTPRequest), let's call it PublicAPI. What I am wanting to do is write methods that directly return data from the web service, something like this...

publicAPI = [[PublicAPI alloc] initWithAccountInfo:email:[self email] password:[self password]];
NSArray *theData = [publicAPI getData];

So, getData needs to initiate the ASIHTTPRequest AND return the response from the server. The problem is that I want to make the ASIHTTPRequest calls with ASIHTTPRequest's startAsynchronous option, which delegates the server's response to a requestFinished method.

How can I use the result of requestFinished as the return value of the getData method?

Thanks for your advice!


Solution

  • Your approach would require that getData wait until the response came back before returning which would make the connection synchronous. This does not really make sense.

    The delegate pattern that is already implemented by ASIHTTPRequest (and NSURLConnection for that matter) is the best approach here.

    If you just need to make a synchronous connection for testing, NSURLConnection has a class method for that:

    + (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error