Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>Here is how I generally do it. I, too, have a singleton object used for making network requests. For requests that have to be made often, I have an NSOperationQueue that accepts AFHTTPRequestOperations (or AFJSONRequestOperations) since I generally use AFNetworking for making requests. For these, there is a completionBlock and failureBlock property that is executed upon success or failure of the request. On my singleton object, I would have a method for initiating a particular network request, and as parameters to that method, I would include a success and failure block which can be passed into the blocks defined in the method. This way, the entire application can make a network request, and the scope of the application at that point is available to the singleton in the block that is passed to the method. For example...(using ARC)</p> <pre><code> @implementation NetworkManager -(void)makeRequestWithSuccess:(void(^)(void))successBlock failure:(void(^)(NSError *error))failureBlock { NSURL *url = [NSURL URLWithString:@"some URL"]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request]; [op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { [responseObject doSomething]; if (successBlock) dispatch_async(dispatch_get_main_queue(), successBlock); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { if (failureBlock) dispatch_async(dispatch_get_main_queue(), ^{ failureBlock(error); }); }]; [self.operationQueue addOperation:op]; } @end </code></pre> <p>And you can always make the success block take whatever parameters you need to pass around. </p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload