iOS 封装网络请求任务
2015-08-20 10:36
441 查看
很多时候我们要用到网络发起任务时,每次都要创建NSRUL、NSMutableURLRequest、NSURLSession...这些对象未免太麻烦,这些对象每次创建时方式几乎是一样的,所以可以考虑把它们封装起来,下次再用时就不必再一个个创建,直接调用已封装好的方法,只需要把不同的地方修改下即可(例如URL网址、请求参数等...),具体的方法现实如下:
// __________WXDataService.h__________ #define Base_URL @"http://www.weather.com.cn/data/sk/" // 宏定义使用重复的网址 typedef void (^CompletionBlock)(id jsonData); // block
// __________WXDataService.m__________ + (void)requestWithURLCityID:(NSString *)IDString withHTTPMethod:(NSString *)method withAllHTTPHeaderFields:(NSDictionary *)HTTPHeaderField withHTTPBody:(NSData *)HTTPBody completion:(CompletionBlock)block { // 网络请求 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[NSStringstringWithFormat:@"%@%@.html",Base_URL,IDString]] cachePolicy:NSURLRequestUseProtocolCachePolicytimeoutInterval:60]; // 判断请求方式 if ([method isEqualToString:@"GET"]) { request.HTTPMethod = @"GET"; }else if ([method isEqualToString:@"POST"]) { request.HTTPMethod = @"POST"; } request.allHTTPHeaderFields = HTTPHeaderField; // 请求头 request.HTTPBody = HTTPBody; // 请求体 // 网络数据任务 NSURLSessionDataTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { if (error != nil) { NSLog(@"错误 = %@",error); return ; // 如果有错误block返回到这里结束 } // 读取文件 NSError *jsonError = nil; // 错误信息 id jsonData = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainerserror:&jsonError]; // 回到主线程执行操作 dispatch_async(dispatch_get_main_queue(), ^{ block(jsonData); // 拿到解析好的jsonData数据 }); }]; [task resume]; //发送网络数据任务 }
// __________ViewController.m__________ // 这样回到主方法ViewController.m中调用,传入需要的参数即可: [WXDataService requestWithURLCityID:cityID withHTTPMethod:@"GET" withAllHTTPHeaderFields:nil withHTTPBody:nilcompletion:^(id jsonData) { [self refreshUIData:jsonData[@"weatherinfo"]]; }]; // 有类似于这种重复的网络任务请求,也可以参照此方法封装起来。
相关文章推荐
- 网络请求
- POJ 1815 Friendship
- 网络爬虫
- 黑马程序员——网络编程
- Apache HTTP Server 2.4 绿色版 安装成系统服务
- 网络流(dinic算法)
- TCP/IP协议三次握手与四次握手流程解析
- 计算机网络题目(不定期更新)
- 修复TCP/IP网络连接
- HTTP长连接与短连接
- HttpClient的get和post
- TCP三次握手和四次挥手协议
- tcpdump笔记
- 更改linux文件夹的默认颜色http://www.cnblogs.com/pmars/p/3730644.html
- android4.0 HttpClient 以后不能在主线程发起网络请求
- 网络编程中的函数汇总篇
- WCF下载***$metadata”时出错。 无法连接到远程服务器由于目标计算机积极拒绝,无法连接。元数据包含无法解析的引用http://localhost 没有终结点在侦听可以接受消这通常是由于不正
- node.js基础:HTTP服务器
- win10系统出现多个网络怎么办?win10系统多余网络的解决方法
- https://software.intel.com/zh-cn/blogs/2014/02/20/svn/