IOS之网络数据下载和JSON解析
简介
在本文中笔者要给大家介绍ios中如何利用NSURLConnnection从网络上下载数据,以及如何解析下载下来的JSON数据格式,以及如何显示数据和图片的异步下载显示。
涉及到的知识点:
1.NSURLConnection异步下载和封装
2.JSON格式和JSON格式解析
3.数据显示和使用SDWebImage异步显示图片
内容
1.网络下载基础知识介绍
什么是网络应用?
网络应用的程序结构
常见的网络接口形式
常见的数据格式
界面开发的一般流程
2. NSURLConnection使用
#import "ZJHttpRequest.h" //消除performSelector的警告 #pragma clang diagnostic ignored "-Warc-performSelector-leaks" //类扩展 //项目实践: // 有些实例变量内部使用, 不想放在头文件中, 放在这儿 @interface ZJHttpRequest ()<NSURLConnectionDataDelegate> { NSURLConnection *_connection; NSString *_url; id _target; SEL _action; } @end @implementation ZJHttpRequest //作用: // 传入网址, 下载完成执行后执行target对象中action方法 -(void)requestWithUrl:(NSString *)url target:(id)target action:(SEL)action { _url = url; _target = target; _action = action; //发起URL请求 _data = [[NSMutableData alloc] init]; _connection = [[NSURLConnection alloc] initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]] delegate:self startImmediately:YES]; } -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { [_data appendData:data]; } -(void)connectionDidFinishLoading:(NSURLConnection *)connection { //下载完成了, 执行保存的方法 if(_target && [_target respondsToSelector:_action]) { [_target performSelector:_action withObject:self]; } } @end
3. JSON格式说明和格式化工具
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. //数据接口 NSString *urlString = @"http://iappfree.candou.com:8080/free/applications/limited?currency=rmb&page=1&category_id="; _dataArray = [[NSMutableArray alloc] init]; //下载 _request = [[ZJHttpRequest alloc] init]; [_request requestWithUrl:urlString target:self action:@selector(dealDowloadFinish:)]; [self createTableView]; } #pragma mark - createTableView -(void)createTableView { _tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain]; _tableView.dataSource = self; _tableView.delegate = self; [self.view addSubview:_tableView]; } -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return _dataArray.count; } -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *cellID = @"cell"; AppCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID]; if(cell == nil) { cell = [[AppCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellID]; } //config cell AppModel *model = _dataArray[indexPath.row]; //cell.textLabel.text = model.name; cell.nameLabel.text = model.name; [cell.iconImageView setImageWithURL:[NSURL URLWithString:model.iconUrl]]; return cell; } -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return 80; } -(void)dealDowloadFinish:(ZJHttpRequest *)request { NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:request.data options:NSJSONReadingMutableContainers error:nil]; //NSLog(@"dict = %@",dict); NSArray *appList = dict[@"applications"]; for (NSDictionary *appDict in appList) { AppModel *model = [[AppModel alloc] init]; model.applicationId = appDict[@"applicationId"]; model.name = appDict[@"name"]; model.iconUrl = appDict[@"iconUrl"]; [_dataArray addObject:model]; } //下载数据刷新显示 [_tableView reloadData]; }
4.一个完成页面点实现(包括model的创建,SDWebImage 的使用)
效果图