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加载框的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 NSURLSession 加载网页

Xcode 7.3:NSURLSession/NSURLConnection HTTP 加载失败(kCFStreamErrorDomainSSL,-9802)

封装jquery的ajax,便于加载等待提示框

NSUrlSession 代理请求失败,错误代码为 310 (kCFErrorHTTPSProxyConnectionFailure)

如何在移动到下一行代码之前完成 NSURLSession 请求

如何在 Swift 中发出 NSURLSession POST 请求