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

 

你可能感兴趣的:(UI)