sendAsynchronousRequest :queue:completionHandler:
Loads the data for a URL request and executes a handler block on an operation queue when the request completes or fails.
+ (void)sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:(void (^)(NSURLResponse*,NSData*, NSError*))handler
Parameters of [NSURLConnection sendAsynchronousRequest]
- request
- The URL request to load. The request object is deep-copied as part of the initialization process. Changes made to request after this method returns do not affect the request that is used for the loading process.[NSURLConnection sendAsynchronousRequest]
- queue
- The operation queue to which the handler block is dispatched when the request completes or failed.
- handler
- The handler block to execute.
Discussion of [NSURLConnection sendAsynchronousRequest]
If the request completes successfully, the data parameter of the handler block contains the resource data, and the error parameter is
nil
. If the request fails, the data parameter is nil
and the error parameter contain information about the failure.
Example of [NSURLConnection sendAsynchronousRequest]
NSURL *url = [NSURL URLWithString:urlString];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[NSURLConnection sendAsynchronousRequest:urlRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
{
if ([data length] > 0 && error == nil)
[delegate receivedData:data];
else if ([data length] == 0 && error == nil)
[delegate emptyReply];
else if (error != nil && error.code == ERROR_CODE_TIMEOUT)
[delegate timedOut];
else if (error != nil)
[delegate downloadError:error];
}];
Example of [NSURLConnection sendAsynchronousRequest]
NSMutableArray *dataArray = [NSMutableArray array];
__block (^handler)(NSURLResponse *response, NSData *data, NSError *error);
NSInteger currentRequestIndex = 0;
handler = ^{
[dataArray addObject:data];
currentRequestIndex++;
if (currentRequestIndex < [requestsArray count]) {
[NSURLConnection sendAsynchronousRequest:[requestsArray objectAtIndex:currentRequestIndex]
queue:[NSOperationQueue mainQueue]
completionHandler:handler];
} else {
[self doSomethingElse];
}
};
[NSURLConnection sendAsynchronousRequest:[requestsArray objectAtIndex:0]
queue:[NSOperationQueue mainQueue]
completionHandler:handler];