美文网首页
AFNetworking 3.x迁移指南

AFNetworking 3.x迁移指南

作者: 狼牙月zz | 来源:发表于2016-05-30 17:04 被阅读184次

    新设备要求: iOS 7, Mac OS X 10.9, watchOS 2, tvOS 9, & Xcode 7

    AFNetworking 3.0正式支持的iOS 7, Mac OS X的10.9, watchOS 2 , tvOS 9 和Xcode 7。如果你想使用AFNetworking在针对较旧版本的SDK项目,请检查README的兼容性信息。

    NSURLConnection的API已废弃

    AFNetworking 1.0建立在NSURLConnection的基础API之上 ,AFNetworking 2.0开始使用NSURLConnection的基础API ,以及较新基于NSURLSession的API的选项。 AFNetworking 3.0现已完全基于NSURLSession的API,这降低了维护的负担,同时支持苹果增强关于NSURLSession提供的任何额外功能。由于Xcode 7中,NSURLConnection的API已经正式被苹果弃用。虽然该API将继续运行,但将没有新功能将被添加,并且苹果已经通知所有基于网络的功能,以充分使NSURLSession向前发展。

    AFNetworking 2.X将继续获得关键的隐患和安全补丁,但没有新的功能将被添加。Alamofire(Swift下的网络请求)软件基金会建议,所有的项目迁移到基于NSURLSession的API。

    弃用的类

    下面的类已从AFNetworking 3.0中废弃:
    AFURLConnectionOperation
    AFHTTPRequestOperation
    AFHTTPRequestOperationManager

    修改的类

    下面的类包含基于NSURLConnection的API的内部实现。他们已经被使用NSURLSession重构:

    UIImageView+AFNetworking
    UIWebView+AFNetworking
    UIButton+AFNetworking

    迁移

    AFHTTPRequestOperationManager 核心代码
    如果你以前使用 AFHTTPRequestOperationManager , 你将需要迁移去使用 AFHTTPSessionManager。 以下的类在两者过渡间并没有变化:
    securityPolicy
    requestSerializer
    responseSerializer

    接下来举一个关于AFHTTPSessionManager的简单例子。注意HTTP网络请求返回的不再是AFHTTPRequestOperation, 修改成为了NSURLSessionTask,并且成功和失败的Block块中的参数也变更为了NSURLSessionTask,而不再是AFHTTPRequestOperation。

    AFNetworking 2.x

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];[manager GET:@"请求的url" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
           NSLog(@"成功");
    } failure:^(AFHTTPRequestOperation *operation, NSError*error) {
     NSLog(@"失败");
    }];
    

    AFNetworking 3.x

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/json",@"text/javascript",@"text/html", nil];
    manager.requestSerializer.timeoutInterval =  10;
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
     //get请求
    if (requestType == RequestTypeGet) {
        [manager GET:url parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {
            
        } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
          
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            failure(@"出现问题了");
        }];
        
    }
    
    //post请求
    if (requestType == RequestTypePost) {
        
        [manager POST:url parameters:parameters progress:^(NSProgress * _Nonnull uploadProgress) {
            
        } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        
            [self dealWithResponseObject:responseObject cacheUrl:cacheUrl cacheData:cacheData isCache:isCache cache:cache cacheKey:cacheKey success:^(NSDictionary *requestDic, NSString *msg) {
                
            } failure:^(NSString *errorInfo) {
                
            }];
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            failure(@"出现问题了");
        }];
    }
    
    //上传
    if (requestType == RequestTypeUpLoad) {
        [manager POST:url parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
            NSTimeInterval timeInterVal = [[NSDate date] timeIntervalSince1970];
            NSString * fileName = [NSString stringWithFormat:@"%@.png",@(timeInterVal)];
            [formData appendPartWithFileData:data name:attach fileName:fileName mimeType:@"image/png"];
        } progress:^(NSProgress * _Nonnull uploadProgress) {
            
            
            loadProgress((float)uploadProgress.completedUnitCount/(float)uploadProgress.totalUnitCount);
            
            
        } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
           
    NSDictionary *jsonDic = [NSJSONSerialization JSONObjectWithData:operation.responseData options:NSJSONReadingMutableContainers error:nil];
            } failure:^(NSString *errorInfo) {
                   failure(errorInfo);
            }];
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            failure(@"出现错误了");
            MCLog(@"上传文件发生错误\n\n    %@  \n\n",error);
        }];
        
    
        
        
    }
    

    AFNetworking 3.x获取statusCode

        [manager GET:url parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {
            
        } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
           NSHTTPURLResponse *response = (NSHTTPURLResponse *)task.response; 
            NSInteger statusCode = [response statusCode];
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            failure(@"出现问题了");
        }];
    

    纯属个人经验,如有错误,还请纠正。

    相关文章

      网友评论

          本文标题:AFNetworking 3.x迁移指南

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