当前位置: 首页 > 面试题库 >

快速获取dataTaskWithURL的进度

颜博达
2023-03-14
问题内容

dataTaskWithURL下载数据时,有什么方法可以迅速取得进展?

NSURLSession.sharedSession().dataTaskWithURL(...)

下载数据时,我需要显示进度栏。


问题答案:

您可以使用此代码通过进度条及其委托功能来显示下载过程。

import UIKit

class ViewController: UIViewController,NSURLSessionDelegate,NSURLSessionDataDelegate{

    @IBOutlet weak var progress: UIProgressView!

    var buffer:NSMutableData = NSMutableData()
    var session:NSURLSession?
    var dataTask:NSURLSessionDataTask?
    let url = NSURL(string:"http://i.stack.imgur.com/b8zkg.png" )!
    var expectedContentLength = 0


    override func viewDidLoad() {
        super.viewDidLoad()
        progress.progress = 0.0
        let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
        let manqueue = NSOperationQueue.mainQueue()
        session = NSURLSession(configuration: configuration, delegate:self, delegateQueue: manqueue)
        dataTask = session?.dataTaskWithRequest(NSURLRequest(URL: url))
        dataTask?.resume()

        // Do any additional setup after loading the view, typically from a nib.
    }
    func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveResponse response: NSURLResponse, completionHandler: (NSURLSessionResponseDisposition) -> Void) {

        //here you can get full lenth of your content
        expectedContentLength = Int(response.expectedContentLength)
        println(expectedContentLength)
        completionHandler(NSURLSessionResponseDisposition.Allow)
    }
    func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveData data: NSData) {


        buffer.appendData(data)

        let percentageDownloaded = Float(buffer.length) / Float(expectedContentLength)
        progress.progress =  percentageDownloaded
    }
    func URLSession(session: NSURLSession, task: NSURLSessionTask, didCompleteWithError error: NSError?) {
        //use buffer here.Download is done
        progress.progress = 1.0   // download 100% complete
    }
}


 类似资料:
  • 我对swift非常陌生,所以我的代码中可能会有很多错误,但我试图实现的是向带有paramters的本地主机服务器发送请求。更重要的是,我试图实现它,因为我的函数接受两个参数。我不确定如何将这两者结合到实际的URLRequest中?以下是我到目前为止所尝试的

  • 问题内容: 我如何获得本地IpAddress? 当我使用该功能时,我将无法再继续使用。我不能使用该功能。 是否有其他方法可以执行此操作,或者我是否以错误的方式进行操作? 问题答案: 在讨论中发现,OP需要Mac上的接口地址,而不是我最初想的那样在iOS设备上。问题中引用的代码将检查接口名称“en0”,它是iPhone上的WiFi接口。在Mac上,改为检查任何“正在运行”的界面更有意义。因此,我重写

  • 问题内容: 所以我试图获取我选择的行的textLabel的值。我尝试打印它,但是没有用。经过研究,我发现该代码有效,但仅在Objective-C中有效。 我找不到Swift的任何解决方案。虽然可以打印indexpath.row,但这不是我所需要的。 所以我该怎么做?或此代码的“快速版本”是什么? 问题答案: 试试这个:

  • 问题内容: 我在解析Mac上的别名链接时遇到问题。我正在检查文件是否是别名,然后我想接收原始路径。相反,我只得到一个文件ID。安莉的想法? 编辑: 两个答案都是正确的!我之所以选择mklement0的答案,是因为最初没有说明该代码必须在10.9上运行,从而使其更加灵活 问题答案: 这是 在OS X 10.9上也可以 使用的 实现 : 注意: 与vadian的解决方案不同,即使对于 非 别名文件,这

  • 问题内容: 我想使用python快速找到任何文件夹的总大小。 这是我编写的用于获取文件夹总大小的简单脚本,大约花费了60秒(+ -5秒)。通过使用多处理,我在四核计算机上将其缩短到23秒。 使用Windows文件浏览器仅需约3秒钟(右键单击->属性即可自行查看)。那么,有没有一种更快的方法来找到文件夹的总大小,使其接近Windows可以达到的速度? Windows 7,python 2.6(搜索,