CYC-数据解析1
来源:互联网 发布:网络匿名性的缺点 编辑:程序博客网 时间:2024/06/05 13:53
#import "FirstViewController.h"@interface FirstViewController ()<NSURLConnectionDataDelegate, NSURLConnectionDelegate>// 声明一个可变的data 用于拼接完整数据@property (nonatomic, retain) NSMutableData *data;// 声明一个链接属性 用于终止网络请求@property (nonatomic, retain) NSURLConnection *connection;@end@implementation FirstViewController
- (void)dealloc{ // 如果本页面被销毁 那么要终止网络请求 [_connection cancel]; [_data release]; [_connection release]; [super dealloc];}
- (void)viewDidLoad { self.view.backgroundColor = [UIColor redColor]; [self addBarButtonItme]; [super viewDidLoad]; // Do any additional setup after loading the view.}
- (void)addBarButtonItme{ UIBarButtonItem *leftButton = [[ UIBarButtonItem alloc] initWithTitle:@"同步" style:(UIBarButtonItemStylePlain) target:self action:@selector(actionLeft:)]; self.navigationItem.leftBarButtonItem = leftButton; [leftButton release]; UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithTitle:@"异步" style:(UIBarButtonItemStylePlain) target:self action:@selector(actionRight:)]; self.navigationItem.rightBarButtonItem = rightButton; [rightButton release];}
// GET同步请求- (void)actionLeft:(UIBarButtonItem *)leftButton{ // 创建网址对象 NSString *oldUrl = kSearchURL; // 如果你请求的网址中带有中文 必须进行重新编码 // 必须进行重新编码 NSUTF8StringEncoding NSString *newUrl = [oldUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; // 把字符串 变成 网址对象 NSURL *url = [NSURL URLWithString:newUrl]; // 发出一个请求 // CachePolicy 缓存策略 一般选 默认缓存策略 // timeoutInterval 请求超时时间 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:(NSURLRequestUseProtocolCachePolicy) timeoutInterval:30.0]; // 默认就是get请求 如果你要设置的话 需要是可变请求 // 设置请求类型 [request setHTTPMethod:@"GET"]; // 建立链接 // 接收二进制数据 // Response 服务器返回的 描述服务器的数据 // error 链接错误信息 // 如果你不需要 描述这个服务器的数据和错误信息 可以直接填nil NSURLResponse *response = nil; NSError *error = nil; NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];// NSLog(@"%@",response); // 转换成咱们要的数据 json数据 NSMutableDictionary *dataDic = [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingMutableContainers) error:nil ]; NSLog(@"%@", dataDic);}
//GET异步请求- (void)actionRight:(UIBarButtonItem *)rightButton{ // 如果网址有中文,需要重新编码 NSString *newUrl = [kSearchURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; // 利用网址字符串 创建一个 网址对象 NSURL *url = [NSURL URLWithString:newUrl]; // 利用网址对象创建一个请求 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:(NSURLRequestUseProtocolCachePolicy) timeoutInterval:30.0]; // 设置请求类型 [request setHTTPMethod:@"GET"];#pragma mark - 异步请求 利用Block 方法实现 // 建立一个异步请求的链接 // [NSOperationQueue mainQueue] 主线程 [NSURLConnection sendAsynchronousRequest:request queue:([NSOperationQueue mainQueue]) completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { // 异步请求 相当于开启一个子线程 去加载数据 // 数据加载完成 调用 block 回到主线程 NSMutableDictionary *dataDic = [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingMutableContainers) error:nil]; NSLog(@"%@", dataDic); // 打印是否是主线程 NSLog(@"%d", [NSThread isMainThread]); }];#pragma mark -- 异步请求 利用代理方法实现-- // 注意:同步 异步 有区别 // 利用请求创建一个链接 // 遵守的协议名字 NSURLConnectionDataDelegate// self.connection = [NSURLConnection connectionWithRequest:request delegate:self];// // // 开启异步请求// [self.connection start];}
#pragma mark - 代理方法实现- (void)connectionDidFinishLoading:(NSURLConnection *)connection{ // 该方法触发 正面data 已经完整了 // 接下来 可以解析数据 NSMutableDictionary *dataDic = [NSJSONSerialization JSONObjectWithData:(self.data) options:(NSJSONReadingMutableContainers) error:nil]; NSLog(@"%@", dataDic); NSLog(@"已经完成加载");}- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ // 拼接data [self.data appendData:data]; NSLog(@"接收数据时触发");}- (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ // 触发方法 链接成功 初始化可变 self.data = [NSMutableData data]; NSLog(@"接收到服务器数据, 说明 链接成功");}- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ NSLog(@"查看错误信息");}
0 0
- CYC-数据解析1
- CYC- 数据解析2
- CYC-数据解析3 - 加载图片
- CYC面面观
- Cyc简介
- CYC-CocoaPods
- cyc 的面试宝典之(面试1(java se 基础篇))
- 6.CYC面面观
- CYC-多线程 售票问题
- CYC- 简单UIView动画
- CYC-数据库的运用
- CYC- 手势解锁
- CYC-MKMapView用法
- CYC-自定义导航栏去黑
- CYC-多线程之 GCD
- CYC-关于UIImagePickerController
- CYC-多线程之详解
- CYC-pickerview 时间选取器
- oc的内存管理和@property的属性关键字
- android多国语言文件夹文件汇总
- HTML5 Canvas使用路径——绘制圆形
- 方法重载和重写(覆盖)的区别
- Android中使用lambda表达式
- CYC-数据解析1
- python 计算文本的相似度
- javascript内存泄漏总结
- ERROR! The server quit without updating PID file!!!(已解决!!!)
- 结构体对齐问题
- CYC- 数据解析2
- elasticsearch基本概念
- asp.net后台获取路径的各种方法归纳
- codeforces 580D(状态dp)