我希望这是你可以使用:
class ViewController: UIViewController , NSURLSessionDownloadDelegate {
var download : NSURLSessionDownloadTask?
var backgroundSession : NSURLSession?
override func viewDidLoad() {
super.viewDidLoad()
let sessionConfiguration : NSURLSessionConfiguration = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier("CustomBackgroundIdentifier")
backgroundSession = NSURLSession(configuration: sessionConfiguration, delegate: self, delegateQueue: NSOperationQueue.mainQueue())
var btn = UIButton(frame: CGRectMake(0, 0, 100, 100))
btn.backgroundColor = UIColor.redColor()
btn.addTarget(self, action: "startDownload", forControlEvents: UIControlEvents.TouchDown)
self.view.addSubview(btn)
var btn2 = UIButton(frame: CGRectMake(0, 120, 100, 100))
btn2.backgroundColor = UIColor.blueColor()
btn2.addTarget(self, action: "cancelDownload", forControlEvents: UIControlEvents.TouchDown)
self.view.addSubview(btn2)
}
func startDownload() {
if download == nil {
if let url = NSURL(string: "http://www.stackoverflow.com") {
download = backgroundSession?.downloadTaskWithURL(url)
download?.resume()
}
} else {
resumeDownload()
}
}
func pauseDownload() {
if download != nil {
download?.suspend()
}
}
func resumeDownload() {
if download != nil {
download?.resume()
}
}
func cancelDownload() {
if download != nil {
download?.cancel()
}
}
func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didFinishDownloadingToURL location: NSURL) {
println("Session %@ download task %@ finished downloading to URL %@\n",
session, downloadTask, location)
}
func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) {
println("downloaded: %i",totalBytesWritten)
}
}
是否打印语句或'NSDomainError'指定任务被取消?如果是这样,只需打开它并忽略该错误,因为您期待它。 – keithbhunter
[如何在NSURLSession中查找和取消任务?](http://stackoverflow.com/questions/23518690/how-to-find-and-cancel-a-task-in-nsurlsession) – LoVo
@LoVo没有什么不同的问题(他在找到任务时遇到问题),我也问过如何快速做到这一点。 – Zeezer