AFNetworking的简单使用

2017/11/18 posted in  iOS

最近看学习一些项目代码到了使用AFNetworking的项目,所以去学习了一下,这里简单的总结一下,AFNetworking的使用方法。

AFNetworking简介

AFNetworking是一个很受大众欢迎的网络框架,可以帮助管理和处理网络任务请求,包括下载、上传、getpost请求等。

安装

AFNetworking的安装可以使用CocoaPods在文件中加入:

pod 'AFNetworking'

并执行 pod install就可以了。有一点要注意的是最新版本为3.1这个版本删除了基于NSURLConnectionOperationAFHTTPRequestOperationManager的支持。转而使用基于NSURLSession封装的AFHTTPSessionManager

网络监听

AFNetworking提供了一个监听网络状态的方法,来实时的判断当前网络是否良好。具体代码如下:

// 如果要检测网络状态的变化,必须用检测管理器的单例的startMonitoring
    /**
     AFNetworkReachabilityStatusUnknown          = -1,  // 未知
     AFNetworkReachabilityStatusNotReachable     = 0,   // 无连接
     AFNetworkReachabilityStatusReachableViaWWAN = 1,   // 3G 花钱
     AFNetworkReachabilityStatusReachableViaWiFi = 2,   // 局域网络,不花钱
     */
    [[AFNetworkReachabilityManager sharedManager] startMonitoring];
    [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        debugLog(@"%ld",(long)status);
    }];

根据当前网络状态会输出所对应的状态数值。

下载

    //session的默认配置
    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
    //根据配置创建管理者
    AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
    NSURL *url = [NSURL URLWithString:@"http://smartdsp.xmu.edu.cn/memberpdf/fuxueyang/cvpr2017/cvpr2017.pdf"];
    //根据url创建请求对象
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    //创建下载任务
    NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
        //设置下载路径
        NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
        //返回文件存放在本地的地址
        return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]];
    } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
        //下载完成后调用方法
        debugLog(@"File download to:%@ , %@",filePath,error);
    }];
    //开始下载任务
    [downloadTask resume];

get请求

    NSString *urlString = @"https://www.weifar.com/api/ExamQuestion/id";
    NSDictionary *parameters = @{@"id":@6};
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    //根据上述参数和请求地址来发送请求
    [manager GET:urlString parameters:parameters progress:^(NSProgress * _Nonnull downloadProgress) {
        debugLog(@"%@",downloadProgress);
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        //成功获取数据后,进行处理
        if (responseObject) {
            NSArray *a = responseObject[@"Questions"];
            NSDictionary *dic = a[0];
            NSString *str = dic[@"BlockDescription"];
            debugLog(@"%@",str);
        }
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        //请求失败,打印错误
        debugLog(@"%@",error);
    }];

总结

以上就是AFNetworking的基本使用,还有其他的一些功能由于没有合适的接口可以进行操作,暂且先搁置下。具体的操作可以参考官方的AFNetworkingAPI文档,