NSURLSession请求封装加HUD加载框
Posted wangxiaoqi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NSURLSession请求封装加HUD加载框相关的知识,希望对你有一定的参考价值。
在.h里面的方法 定义单例类 typedef void(^SuccessBlock) (id block); typedef void(^FailureBlock) (id block); @interface NetRequest : NSObject <NSURLSessionDelegate> + (instancetype)shareInstance; - (void)requestWithURL:(NSString *)url params:(NSDictionary *)params successBlock:(SuccessBlock)success failure:(FailureBlock)failure;
#import <SVProgressHUD.h> // 第三方加载条控件 static NetRequest *reuqest; @implementation NetRequest { SuccessBlock sucblock; FailureBlock faiBlock; NSMutableData *_allData; } + (instancetype)shareInstance { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ reuqest = [[NetRequest alloc] init]; }); return reuqest; } + (instancetype)allocWithZone:(struct _NSZone *)zone { if (!reuqest) { reuqest = [super allocWithZone:zone]; } return reuqest; } - (id)copy { return reuqest; } - (void)requestWithURL:(NSString *)url params:(NSDictionary *)params successBlock:(SuccessBlock)success failure:(FailureBlock)failure { NSURLRequest *myRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:15]; NSURLSessionDownloadTask *downLoad =[[NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]] downloadTaskWithRequest:myRequest]; // 开始请求 [SVProgressHUD showWithStatus:@"正在加载..."]; //提示加载 [downLoad resume]; sucblock = success; faiBlock = failure; } // 请求完成 - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location { NSData *data = [NSData dataWithContentsOfURL:location]; id reuslt = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; sucblock(reuslt); [SVProgressHUD dismiss]; } // 网络请求进度 - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite { double progress = ( double )totalBytesWritten / totalBytesExpectedToWrite; NSLog ( @" 下载进度 ---%f" , progress); [SVProgressHUD showProgress:progress]; }
然后再viewcontroller里面就可以写
// 请求 NSString *string = [NSString stringWithFormat:@"http://……………………………………]; NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:string]]; // 配置 NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; // 任务 NSURLSessionTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { NSDictionary *result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; NSLog(@"%@", result); }
一般我们都会封装一个AFN的网络请求 可以满足我们基本上的任何需要 但是偶尔我们也是要用一些
NSURLSession 如果特殊情况 封装好了以后可以拿过来用了
以上是关于NSURLSession请求封装加HUD加载框的主要内容,如果未能解决你的问题,请参考以下文章
Xcode 7.3:NSURLSession/NSURLConnection HTTP 加载失败(kCFStreamErrorDomainSSL,-9802)
NSUrlSession 代理请求失败,错误代码为 310 (kCFErrorHTTPSProxyConnectionFailure)