初级网络-day1-JSON解析
// // ViewControllerA.m // 初级网络-day2-JSON练习 // // Created by bch on 15-3-24. // Copyright (c) 2015年 白超华. All rights reserved. // #import "ViewControllerA.h" //引入处理图片和网络请求的库,主要用于异步下载图片 #import "UIImageView+WebCache.h" //定义一个URL来解析对应的JSON #define BOOK_URL @"https://api.douban.com/v2/book/1220562?apikey=0305449cf6bb6dfc090fcdd6e43249f4" @interface ViewControllerA ()<NSURLConnectionDelegate,NSURLConnectionDataDelegate> { NSURLConnection *_connection;//用于网络连接 NSMutableData *_receiveData; //用于接收数据的变量 UIImageView *_picView; //显示图片,准确的来说是相框 } @end @implementation ViewControllerA -(instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{ if (self=[super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { //初始化 _receiveData=[[NSMutableData alloc]init]; } return self; } - (void)viewDidLoad { [super viewDidLoad]; //首先,我们向服务器发起请求 _connection=[NSURLConnection connectionWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:BOOK_URL]] delegate:self]; _picView=[[UIImageView alloc]initWithFrame:self.view.bounds]; //请求图片 //setImageWithURL下载并缓存图片 //setImageWithURL placeholderImage 下载并且缓存图片,在图片未下载完之前显示placeholder图片内容 // [_picView setImageWithURL:[NSURL URLWithString:@"http://img1.tgbusdata.cn/v2/thumb/jpg/NDJDQyw1OTUsMTAwLDQsMywxLC0xLDAscms1MA==/u/zx.tgbus.com/UploadFiles_4349/201309/2013092510153873.jpg"] placeholderImage:[UIImage imageNamed:@"1.png"]]; [self.view addSubview:_picView]; } #pragma mark-connection的代理方法 //服务器的响应信息 -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ //清空数据 _receiveData.length=0; } //接收服务器传过来的数据 -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ [_receiveData appendData:data]; } //传输结束,那么我们开始解析JSON数据 -(void)connectionDidFinishLoading:(NSURLConnection *)connection{ NSLog(@"我们下载下来的东西就是 str = %@",[[NSString alloc]initWithData:_receiveData encoding:NSUTF8StringEncoding]); //解析JSON字符串称为对象 /* 由于JSON是以字典的形式存在,所以我们用一个字典来接收它。 JSONObjectWithData:_receiveData options:NSJSONReadingMutableContainers error:nil 上面的方法是用来接收JSON数据的,其中OPtion是一个枚举,有三个选项,但不清楚三个选项的区别 */ NSDictionary * dataDic=[NSJSONSerialization JSONObjectWithData:_receiveData options:NSJSONReadingMutableContainers error:nil]; //下面这句话,实际上是从JSON中取东西,由于我们把JSON存放在了名为dataDic的字典中,所以下面这句话的格式,实际上是从dataDic中取出值为images的键,同时,而后面的large则是从images中取出值为large的键。也就是说字典dataDic中包含了一个images对象,这个对象里面有很多键值对元素,large就是其中一个。 NSLog(@"image = %@",dataDic[@"images"][@"large"]); NSLog(@"dataDic下tags下,第[2]个,里面的值为name的键 = %@",dataDic[@"tags"][2][@"name"]); //那么让我利用这次机会,和_imageView来回顾一下同步和异步的区别吧 //下面2个方法都是下载,只是下载方式不同,下载完成之后,将图片给_picView /*同步请求*/ //利用字典 // _picView.image=[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:dataDic[@"images"][@"large"]]]]; /*异步请求*/ //异步下载,利用字典 //[_picView setImageWithURL:[NSURL URLWithString:dataDic[@"images"][@"large"]] placeholderImage:[UIImage imageNamed:@"1"]]; } //服务器响应失败 -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ if (error) { NSLog(@"%@",error); } } @end
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。