美文网首页iOS开发技术
封装的AFNetWork工具.m

封装的AFNetWork工具.m

作者: zbj_ | 来源:发表于2015-10-10 12:47 被阅读0次

    @implementation ZBJAFNetworkTool

    + (void)getUrl:(NSString *)url

    body:(id)body

    result:(ZBJResult)result

    headerFile:(NSDictionary *)headerFile

    success:(void (^)(id result))success

    failure:(void (^)(NSError *error))failure

    {

    NSString *str = [url stringByReplacingOccurrencesOfString:@"/" withString:@""];

    NSString *sandBoxPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];

    NSString *caches = [sandBoxPath stringByAppendingPathComponent:str];

    id responseObject = [NSKeyedUnarchiver unarchiveObjectWithFile:caches];

    if (responseObject != nil) {

    success(responseObject);

    }

    /**

    *  1.获取网络请求管理类

    */

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

    //    3.为网络请求加请求头

    if (headerFile) {

    for (NSString *key in headerFile.allKeys) {

    [manager.requestSerializer setValue:headerFile[key] forHTTPHeaderField:key];

    }

    }

    //    4.设置返回值类型

    switch (result) {

    /**

    *  返回值为NSData

    */

    case ZBJData:

    manager.responseSerializer = [AFHTTPResponseSerializer serializer];

    break;

    case ZBJJson:

    break;

    case ZBJXML:

    /**

    *  XML型

    */

    manager.responseSerializer = [AFXMLParserResponseSerializer serializer];

    break;

    default:

    break;

    }

    //    2.设置网络请求返回值所支持的参数类型

    [manager.responseSerializer setAcceptableContentTypes:[NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/css",@"text/plain", nil]];

    #pragma mark 让网络指示器旋转

    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

    //    5.发送网络请求

    [manager GET:url parameters:body success:^(AFHTTPRequestOperation *operation, id responseObject) {

    if (responseObject) {

    //            成功回调

    success(responseObject);

    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

    //            NSString *str = [url stringByReplacingOccurrencesOfString:@"/" withString:@""];

    // 缓存

    NSArray *sandBox = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);

    NSString *sandBoxPath = sandBox[0];

    NSString *caches = [sandBoxPath stringByAppendingPathComponent:str];

    [NSKeyedArchiver archiveRootObject:responseObject toFile:caches];

    }

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

    if (error) {

    //            失败回调

    failure(error);

    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

    }

    }];

    }

    + (void)postUrl:(NSString *)url

    body:(id)body

    result:(ZBJResult)result

    requestStyle:(ZBJRequestStyle)requestStyle

    headerFile:(NSDictionary *)headerFile

    success:(void (^)(id result))success

    failure:(void (^)(NSError *error))failure

    {

    //    1.获取网络请求管理类

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

    //    3.网络请求请求体的类型

    switch (requestStyle) {

    case ZBJRequestJSON:

    manager.requestSerializer = [AFJSONRequestSerializer serializer];

    break;

    case ZBJRequestString:

    [manager.requestSerializer setQueryStringSerializationWithBlock:^NSString *(NSURLRequest *request, id parameters, NSError *__autoreleasing *error) {

    return parameters;

    }];

    break;

    default:

    break;

    }

    //    4.为网络请求加请求头

    if (headerFile) {

    for (NSString *key in headerFile.allKeys) {

    [manager.requestSerializer setValue:headerFile[key] forHTTPHeaderField:key];

    }

    }

    //    5.网络请求返回值的数据类型

    switch (result) {

    /**

    *  返回值为NSData

    */

    case ZBJData:

    manager.responseSerializer = [AFHTTPResponseSerializer serializer];

    break;

    case ZBJJson:

    break;

    case ZBJXML:

    /**

    *  XML型

    */

    manager.responseSerializer = [AFXMLParserResponseSerializer serializer];

    break;

    default:

    break;

    }

    //    2.设置网络请求返回值支持的类型

    [manager.responseSerializer setAcceptableContentTypes:[NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/css",@"text/plain", nil]];

    //    6.发送网络请求

    [manager POST:url parameters:body success:^(AFHTTPRequestOperation *operation, id responseObject) {

    if (responseObject) {

    success(responseObject);

    }

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

    if (error) {

    failure(error);

    }

    }];

    }

    相关文章

      网友评论

        本文标题:封装的AFNetWork工具.m

        本文链接:https://www.haomeiwen.com/subject/vjhncttx.html