设为首页 加入收藏

TOP

iOS 学习 - 10下载(1) NSURLConnection 篇(一)
2017-10-13 10:24:12 】 浏览:5820
Tags:iOS 学习 下载 NSURLConnection篇

程序的实现需要借助几个对象:

NSURLRequest:建立了一个请求,可以指定缓存策略、超时时间。和NSURLRequest对应的还有一个NSMutableURLRequest,如果请求定义为NSMutableURLRequest则可以指定请求方法(GET或POST)等信息。

NSURLConnection:用于发送请求,可以指定请求和代理。当前调用NSURLConnection的start方法后开始发送异步请求。

当然了这种方法比较原始。。。

//
// ViewController.m // xiazai //
// Copyright © 2016年 asamu. All rights reserved. // 
#import "ViewController.h"

@interface ViewController ()<NSURLConnectionDataDelegate> { NSMutableData *_data;//响应数据
    UITextField *_textField; UIButton *_button; UIProgressView *_progressView; UILabel *_label; long long _totalLength; NSDictionary *_musicDic; } @end

@implementation ViewController #pragma mark -- UI方法
- (void)viewDidLoad { [super viewDidLoad]; [self analysisJson]; [self layoutUI]; } #pragma mark -- 私有方法
#pragma mark  解析 JSON
-(void)analysisJson{ NSError *error; NSString *str = @"http://douban.fm/j/mine/playlist?channel=3"; NSURL *url = [NSURL URLWithString:str]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; NSDictionary *musicDic = [[NSDictionary alloc]init]; //遍历字典 取出 key - @"song"
    for (musicDic in dic[@"song"]) { _musicDic = musicDic; } } #pragma mark 界面布局
-(void)layoutUI{ //地址栏
    _textField = [[UITextField alloc]initWithFrame:CGRectMake(10, 50, 300, 25)]; //加圆角和边框
    _textField.layer.cornerRadius = 3.0f; _textField.layer.borderWidth = 0.5f; _textField.textColor = [UIColor redColor]; /* 解析的 JOSN 中的 歌曲名加上 .mp3 的后缀 这个名字就是存储在沙盒中的名字,所以要加 .mp3 由于名称不一样,所以不会覆盖 */ NSString *musicName = [_musicDic[@"title"] stringByAppendingString:@".mp3"]; _textField.text = musicName; [_textField sizeToFit]; [self.view addSubview:_textField]; //进度条
    _progressView = [[UIProgressView alloc]initWithFrame:CGRectMake(10, 100, 300, 25)]; [self.view addSubview:_progressView]; //状态显示
    _label = [[UILabel alloc]initWithFrame:CGRectMake(10, 130, 300, 25)]; _label.textColor = [UIColor colorWithRed:0 green:146/255.0 blue:1.0 alpha:1.0]; [self.view addSubview:_label]; //下载按钮
    _button = [[UIButton alloc]initWithFrame:CGRectMake(10, 500, 300, 25)]; [_button setTitle:@"下载" forState:UIControlStateNormal]; [_button setTitleColor:[UIColor colorWithRed:0 green:146/255.0 blue:1.0 alpha:1.0] forState:UIControlStateNormal]; [_button addTarget:self action:@selector(sendRequest) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:_button]; } #pragma mark -- 更新进度
-(void)updateProgress{ if (_data.length == _totalLength) { _label.text = @"Finish downloaded"; }else{ _label.text = @"downing..."; [_progressView setProgress:(float)_data.length/_totalLength]; } } #pragma mark -- 发送请求
-(void)sendRequest{ NSLog(@"begin"); NSString *urlStr = [NSString stringWithFormat:_musicDic[@"url"],_textField.text]; //解码
    urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; // 创建 URL 链接
    NSURL *url = [NSURL URLWithString:urlStr]; //创建请求
    NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeo
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇MJRefresh下拉刷新框架 下一篇Socket小白篇-附加TCP/UDP简介

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目