IOS之网络数据下载和JSON解析
IOS之网络数据下载和JSON解析
简介
在本文中笔者将要给大家介绍IOS中如何利用NSURLConnection从网络上下载数据,如何解析从网络下载下来的JSON数据格式,以及如何显示实践和图片的异步下载显示
涉及到的知识点:
1.NSURLConnection异步下载和封装;
2.JSON格式和JSON格式解析;
3.数据显示和使用SDWebImage异步显示图片;
内容
1.网络下载基础知识介绍
什么是网络应用?
需要从网络上获取数据的应用
网络应用的程序结构?
C/S结构
Client客户端: 展示数据, 与用户进行交互
Server服务端: 为客户端提供数据, 提供服务
常见的网络接口形式?
地址使用协议+主机地址+主机端口+网页程序文件+程序参数
常见的数据格式?
JSON 跟XML;
界面开发的一般流程?
下载数据,解析数据,建立数据模型,使用视图显示,tabelView+自制Cell;图片的异步下载SDWebImage;
2.NSURLConnection使用
NSString 的同步下载
NSError *error = nil; NSURL *url = [NSURL URLWithString:urlString]; NSString *content = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error]; if (error==nil) { NSLog(@"content = %@",content); } else { NSLog(@"下载失败"); }
NSURLConnection 同步下载
NSURL *url = [NSURL URLWithString:urlString]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; NSError *error = nil; NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error]; if(error == nil) { NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"str = %@",str); } else { NSLog(@"下载失败"); }
NSURLConection异步下载
@property (copy,nonatomic) NSMutableData *data; //作用: // 传入网址, 下载完成执行后执行target对象中action方法 -(void)requestWithUrl:(NSString *)url target:(id)target action:(SEL)action; @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]; } }
3.JSON格式的说明和格式化工具
//JSON
//JavaScript Object Notation
/*
{
"count":20,
"data":[
"zhangsan",
"lisi",
"wangwu"
]
}
*/
//[] 表示数组,对应NSArray
//, 表示并列的数据
//{} 表示字典,对应NSDictionary
//: 表示键值对
//"ta" 表示字符串,对应NSString
//20 对应NSNumber
//JSON格式格式化工具
// Jason
// Json Editor
// 在线: http://www.kjson.com/
4.一个完整页面的实现(包含model的创建,SDWebImage的使用)
创建Model
解析JSON的数据
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];
创建UITabelView 跟自制Cell
-(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; }
SDWebImage的使用
<1> 导入库的文件
<2> 如何在ARC工程中使用非ARC的代码???
解决: 在SDWebImage源码文件中禁止ARC功能
工程配置-->Targets-->Build Phases--> Compile Source
搜索文件SD,Cache, 得到的文件添加标志 -fno-objc-arc
包含: #import "UIImageView+WebCache.h"
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。