CYC-数据解析1

#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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值