Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p><em>Answer updated for AFNetworking 2.x</em></p> <h2>For AFNetworking 2.x:</h2> <p>In 2.x, they did away with AFHTTPClient, so you'll need to extend AFHTTPRequestOperationManager with your own class. Then, you can call that class from other code. For example, here's a sample class that extends the AFHTTPRequestOperationManager:</p> <p>SBAPIManager.h:</p> <pre><code>#import "AFHTTPRequestOperationManager.h" @interface SBAPIManager : AFHTTPRequestOperationManager - (void)setUsername:(NSString *)username andPassword:(NSString *)password; + (SBAPIManager *)sharedManager; @end </code></pre> <p>SBAPIManager.m:</p> <pre><code>#import "SBAPIManager.h" #import "AFNetworkActivityIndicatorManager.h" @implementation SBAPIManager #pragma mark - Methods - (void)setUsername:(NSString *)username andPassword:(NSString *)password { [self.requestSerializer clearAuthorizationHeader]; [self.requestSerializer setAuthorizationHeaderFieldWithUsername:username password:password]; } #pragma mark - Initialization - (id)initWithBaseURL:(NSURL *)url { self = [super initWithBaseURL:url]; if(!self) return nil; self.requestSerializer = [AFJSONRequestSerializer serializer]; [[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES]; return self; } #pragma mark - Singleton Methods + (SBAPIManager *)sharedManager { static dispatch_once_t pred; static SBAPIManager *_sharedManager = nil; dispatch_once(&amp;pred, ^{ _sharedManager = [[self alloc] initWithBaseURL:[NSURL URLWithString:@"http://localhost:3000"]]; }); // You should probably make this a constant somewhere return _sharedManager; } @end </code></pre> <p>Then, in your code, you can call it like this:</p> <pre><code>[[SBAPIManager sharedManager] setUsername:yourUsernameVariableHere andPassword:yourPasswordVariableHere]; [[SBAPIManager sharedManager] GET:@"/tasks.json" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { self.tasks = [responseObject objectForKey:@"results"]; [self.activityIndicatorView stopAnimating]; [self.tableView setHidden:NO]; [self.tableView reloadData]; NSLog(@"JSON"); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { // error stuff here }]; </code></pre> <hr> <h2>For AFNetworking 1.x:</h2> <p>The best practice for this in AFNetworking is to extend the AFHTTPClient with your own class. Then, you can call that class from other code. For example, here's a sample class that extends the AFHTTPClient:</p> <p>SBAPIManager.h:</p> <pre><code>#import "AFNetworking/AFHTTPClient.h" @interface SBAPIManager : AFHTTPClient - (void)setUsername:(NSString *)username andPassword:(NSString *)password; + (SBAPIManager *)sharedManager; @end </code></pre> <p>SBAPIManager.m:</p> <pre><code>#import "SBAPIManager.h" #import "AFJSONRequestOperation.h" #import "AFNetworkActivityIndicatorManager.h" @implementation SBAPIManager #pragma mark - Methods - (void)setUsername:(NSString *)username andPassword:(NSString *)password { [self clearAuthorizationHeader]; [self setAuthorizationHeaderWithUsername:username password:password]; } #pragma mark - Initialization - (id)initWithBaseURL:(NSURL *)url { self = [super initWithBaseURL:url]; if(!self) return nil; [self registerHTTPOperationClass:[AFJSONRequestOperation class]]; [self setDefaultHeader:@"Accept" value:@"application/json"]; [self setParameterEncoding:AFJSONParameterEncoding]; [[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES]; return self; } #pragma mark - Singleton Methods + (SBAPIManager *)sharedManager { static dispatch_once_t pred; static SBAPIManager *_sharedManager = nil; dispatch_once(&amp;pred, ^{ _sharedManager = [[self alloc] initWithBaseURL:[NSURL URLWithString:@"http://localhost:3000"]]; }); // You should probably make this a constant somewhere return _sharedManager; } @end </code></pre> <p>Then, in your code, you can call it like this:</p> <pre><code>[[SBAPIManager sharedManager] setUsername:yourUsernameVariableHere andPassword:yourPasswordVariableHere]; [[SBAPIManager sharedManager] getPath:@"/tasks.json" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { self.tasks = [responseObject objectForKey:@"results"]; [self.activityIndicatorView stopAnimating]; [self.tableView setHidden:NO]; [self.tableView reloadData]; NSLog(@"JSON"); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { // error stuff here }]; </code></pre>
 

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