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
原创粉丝点击