//
// ViewController.swift
// 下载器demo
//
// Created by 曾志良 on 15/9/14.
// Copyright (c) 2015年 曾志良. All rights reserved.
//
文字述说
//记录
//NSURLSession 是一个代替NSURLConnection的API。它提供影响政策的选择,以及各方面NSURLRequest从网络获取对象的机制。
代码展示
import UIKit
class ViewController: UIViewController,NSURLSessionDownloadDelegate {
@IBOutlet var progressView: UIProgressView!
//var progressView:UIProgressView
override func viewDidLoad() {
super.viewDidLoad()
// ============获取NSURLSession类对象有几种方式:===================================================
// 第一种方式是使用静态的sharedSession方法,该类使用共享的会话,该会话使用全局的Cache,Cookie和证书。
//
// 第二种方式是通过sessionWithConfiguration:方法创建对象,也就是创建对应配置的会话,与NSURLSessionConfiguration合作使用。
//
// 第三种方式是通过sessionWithConfiguration:delegate:delegateQueue方法创建对象,二三两种方式可以创建一个新会话并定制其会话类型。该方式中指定了session的委托和委托所处的队列。当不再需要连接时,可以调用Session的invalidateAndCancel直接关闭,或者调用finishTasksAndInvalidate等待当前Task结束后关闭。这时Delegate会收到URLSession:didBecomeInvalidWithError:这个事件。Delegate收到这个事件之后会被解引用。
//==========================第一种方式====================================================
let session=NSURLSession.sharedSession()
let url=NSURL(string: "http://www.douban.com/j/app/radio/channels")
var data=NSData(contentsOfURL: url!)
// NSURLSession创建NSURLSessionTask对象,NSURLSessionTask对象起着负载资源的作用,
// 这类似于NSURLConnection对象但提供更多的控制和统一委托模型。
let dataTassk=session.dataTaskWithURL(url!, completionHandler: { (data:NSData!, response:NSURLResponse!, error:NSError!) -> Void in
let json: AnyObject?=NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.allZeros, error: nil)
println("第一种方式的结果de json\(json)")
})
dataTassk.resume()//NSURLSessionTask对象创建的时候总是处于暂停状态,在执行之前必须发送恢复的信息。
//==============================第二种方式===========================================================
let url2=NSURL(string: "http://www.douban.com/j/app/radio/channels")
let sessionConfiguration=NSURLSessionConfiguration.defaultSessionConfiguration()
let session2=NSURLSession(configuration: sessionConfiguration, delegate: self, delegateQueue: nil)
var task2=session2.downloadTaskWithURL(url2!)
task2.resume()
}
//==============================第二种方式===========================================================
//下载完成时调用的方法
func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didFinishDownloadingToURL location: NSURL){
let data=NSData(contentsOfURL: location)
let json2=NSString(data: data!, encoding: NSUTF8StringEncoding)
println("第2种方式的结果de json\(json2)")
}
func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64){
var progress=Float(totalBytesWritten)/Float(totalBytesExpectedToWrite)
//
dispatch_async(dispatch_get_main_queue(),{()->Void in
self.progressView.progress=progress
})
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}