zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    回调函数 协程
    网络编程 之线程
    并发编程 之进程相关
    并发编程的理论 python中实现多进程
    基于tcp的粘包处理终极版本
    基于socket的网络编程
    数据分析
    zabbix从入门到放弃
    Linux
    Django
  • 原文地址:https://www.cnblogs.com/0515offer/p/4655047.html
Copyright © 2011-2022 走看看