UI2_异步下载

//  AppDelegate.m
//  UI2_异步下载
//
//  Created by zhangxueming on 15/7/17.
//  Copyright (c) 2015年 zhangxueming. All rights reserved.
//

#import "AppDelegate.h"
#import "ViewController.h"

@interface AppDelegate ()

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    ViewController *root = [[ViewController alloc] init];
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:root];
    self.window.rootViewController = nav;
    self.window.backgroundColor = [UIColor whiteColor];
    
    return YES;
}
//  ViewController.h
//  UI2_异步下载
//
//  Created by zhangxueming on 15/7/17.
//  Copyright (c) 2015年 zhangxueming. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface ViewController : UITableViewController <NSURLConnectionDataDelegate>


@end



//
//  ViewController.m
//  UI2_异步下载
//
//  Created by zhangxueming on 15/7/17.
//  Copyright (c) 2015年 zhangxueming. All rights reserved.
//

#import "ViewController.h"
#import "UIImageView+WebCache.h"

//异步下载:向服务器发送请求后,UI主线程能继续交互,另外单独创建一个线程下载数据

@interface ViewController ()
{
    NSURLConnection *_urlConntecion;//建立客户端与服务器的连接
    NSMutableArray *_dataList;      //数据源
    NSMutableData *_receiveData;    //存储服务器下发的数据
}

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    _dataList = [NSMutableArray array];
    _receiveData = [NSMutableData data];
    [self loadDataWithPage:10];
}

- (void)loadDataWithPage:(NSInteger)page
{
    //1.创建NSURL
    NSString *urlString = [NSString stringWithFormat:@"http://iappfree.candou.com:8080/free/applications/limited?currency=rmb&page=%ld", page];
    NSURL *url = [NSURL URLWithString:urlString];
    
    //2.创建网络请求对象
    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
    
    //3.通过NSURLConnection对象实现异步下载数据
    _urlConntecion = [[NSURLConnection alloc] initWithRequest:request delegate:self];
}

#pragma mark ---NSURLConnectionDataDelegate---

//当客户端接受到服务器的响应,调用此方法
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    //打印状态码
    NSLog(@"statusCode = %li", ((NSHTTPURLResponse *)response).statusCode);
    //清空数据
    [_receiveData setLength:0];
}

//当从服务器接受到数据的时候, 调用此方法,如果数据量比较大, 该方法被调用多次
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [_receiveData appendData:data];
}

//当数据完成下载, 调用该方法
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    //数据解析
    id result = [NSJSONSerialization JSONObjectWithData:_receiveData options:NSJSONReadingMutableContainers error:nil];
    if ([result isKindOfClass:[NSDictionary class]])
    {
        NSLog(@"result = %@", result);
        NSArray *app = [result objectForKey:@"applications"];
        [_dataList addObjectsFromArray:app];
    }
    else if([result isKindOfClass:[NSArray class]])
    {
        
    }
    //刷新UI
    [self.tableView reloadData];
}

//下载数据失败的时候调用该方法
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    //打印错误信息
    NSLog(@"%@", error.localizedDescription);
}

#pragma mark ---UITableViewDataSource---

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return _dataList.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *reuseId = @"cellId";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseId];
    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:reuseId];
    }
    //name
    //currentPrice
    //iconUrl
    NSDictionary *dict = _dataList[indexPath.row];
    cell.textLabel.text = [dict objectForKey:@"name"];
    cell.detailTextLabel.text =[NSString stringWithFormat:@"原价:%@RMB",[dict objectForKey:@"lastPrice"]];
    NSString *iconUrl = [dict objectForKey:@"iconUrl"];
    //图片异步加载并设置默认图片
    [cell.imageView setImageWithURL:[NSURL URLWithString:iconUrl] placeholderImage:[UIImage imageNamed:@"holderImage"]];
    
    return cell;
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
原文地址:https://www.cnblogs.com/0515offer/p/4655047.html