AFNetworking替换 - 替换为AFHTTPClient

时间:2014-07-09 06:57:35

标签: ios objective-c xcode cocoa-touch afnetworking

我使用下面的代码来执行我的web服务调用。我使用了AFNetworking版本低于2.0的AFHTTPClient。现在我已经迁移到最新版本的AFNetworking。我没有在最新版本中找到AFHTTPClient类。我应该用最新的代码替换它以便它再次起作用。请帮助

@interface APIClient : AFHTTPClient

+ (APIClient*)client;

- (void)commandWithMethod:(NSString *)method params:(NSMutableDictionary*)params success:(APIClientSuccessCallback)successBlock failure:(APIClientFailureCallback)failureBlock;

@end


// Singleton method
+ (APIClient*)client {

static APIClient *client = nil;
static dispatch_once_t onceInst;

dispatch_once(&onceInst, ^{

    client = [[self alloc] initWithBaseURL:[NSURL URLWithString:APIHost]];

    [AFJSONRequestOperation addAcceptableContentTypes:[NSSet setWithObjects:
                                                       @"application/json",
                                                       @"text/json",
                                                       @"text/javascript",
                                                       @"text/plain",
                                                       @"text/html",
                                                       @"application/x-www-form-urlencoded", nil]];
});

return client;
}

#pragma mark - Init

// Intialize the API class with the destination host name
- (APIClient*)init {

self = [super init]; // call super init

if (self != nil) {
    [self registerHTTPOperationClass:[AFJSONRequestOperation class]];
    // Accept HTTP Header; see http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.1
    [self setDefaultHeader:@"Accept" value:@"application/json"];
}
return self;
}

#pragma mark - Core API Methods

// This function sends an API call to the server
- (void)commandWithMethod:(NSString *)method params:(NSMutableDictionary*)params success:(APIClientSuccessCallback)successBlock failure:(APIClientFailureCallback)failureBlock {

[MBMNetworkActivity pushNetworkActivity];

NSMutableURLRequest *apiRequest = [self requestWithMethod:@"POST" path:method parameters:params];

AFJSONRequestOperation *operation = [[AFJSONRequestOperation alloc] initWithRequest: apiRequest];

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    // success! :)
    [MBMNetworkActivity popNetworkActivity];
    successBlock(responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    // failure! :(
    [MBMNetworkActivity popNetworkActivity];
    failureBlock(error);
}];

[operation start];
}

3 个答案:

答案 0 :(得分:1)

您可以将NSURLSession用于相当多的AFHTTPClient Stuff。 但要实现所有功能,只需编写一个像现在这样的类,但基于NSObject。

NSURLSession有一个非常好的API和很棒的功能。

答案 1 :(得分:1)

AFHTTPRequestOperationManager是子类的替换类,而不是AFHTTPClient。它不一样,但它可能是你想要的。

我建议你阅读Mattt Thompson的博客NSHipster。他是AFNetworking的作者,并且暂时覆盖了这些变化http://nshipster.com/afnetworking-2/。还有一个对您有用的AFNetworking 2.0迁移指南https://github.com/AFNetworking/AFNetworking/wiki/AFNetworking-2.0-Migration-Guide

答案 2 :(得分:0)

最后,我可以使用AFHTTPRequestOperationManager替换AFHttpClient进行以下更改

typedef void (^APIClientSuccessCallback) (id response);
typedef void (^APIClientFailureCallback) (id error);



@interface APIClient : AFHTTPRequestOperationManager


+ (APIClient*)client;

- (void)commandWithMethod:(NSString *)method params:(NSMutableDictionary*)params success:(APIClientSuccessCallback)successBlock failure:(APIClientFailureCallback)failureBlock;

@end

#import "APIClient.h"

@implementation APIClient


+ (APIClient*)client {

static APIClient *client = nil;
static dispatch_once_t onceInst;

dispatch_once(&onceInst, ^{

    client = [[self alloc] initWithBaseURL:[NSURL URLWithString:APIHost]];
    client.responseSerializer = [AFJSONResponseSerializer serializer];
    [client.responseSerializer setAcceptableContentTypes:[NSSet setWithObject:@"text/html"]];

});

return client;
}


#pragma mark - Core API Methods

// This function sends an API call to the server
- (void)commandWithMethod:(NSString *)method params:(NSMutableDictionary*)params success:(APIClientSuccessCallback)successBlock failure:(APIClientFailureCallback)failureBlock {

[self POST:method parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"response --- %@",responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"error ----- %@",error);
}];

}

@end