• 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
    
  • 相关阅读:
    安卓跑马灯
    utf-8加密用于汉字加密(避免乱码)
    设置将edittext的光标到最后
    自定义UIProgressView,实现渐变色进度条,带动画的
    UIImageView帧动画,包含暂停和继续功能
    UIImageView关键帧动画,监听动画结束的回调
    自定义UICollectionViewFlowLayout实现横向滚动时,离中心点越近,item越大,离中心店越远,item越小的效果
    iOS中UIView的Pan手势和UIScrollView滚动手势的冲突解决方案
    使用Cocoapods创建私有库的流程
    git代码仓库迁移的步骤
  • 原文地址:https://www.cnblogs.com/0515offer/p/4655047.html
Copyright © 2020-2023  润新知