【问题标题】:Download file with AFNetworking in swift使用 AFNetworking 快速下载文件
【发布时间】:2014-07-31 20:07:40
【问题描述】:

我想在 swift 中使用 AFNetworking 从 URL 下载文件,并显示下载进度。我有这个代码,但它不起作用:

func downloadPdf()
{
    var request = NSURLRequest(URL: NSURL(string: "http://www.sa.is/media/1039/example.pdf"))
    let session = AFHTTPSessionManager()

    var progress: NSProgress?

    var downloadTask = session.downloadTaskWithRequest(request, progress: &progress, destination: {(file, responce) in self.pathUrl},
        completionHandler:
        {
            response, localfile, error in
            println("response \(response)")
        })

    downloadTask.resume()
}

var pathUrl: NSURL
{
    var path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
    var url = NSURL(string: path.stringByAppendingPathComponent("file.pdf"))
    println(url.path)
    return url
}

我做错了什么?

【问题讨论】:

  • 什么不起作用?你打印 NSLog 看看你得到了什么?
  • 顺便说一下,看看 Alamofire - 那是一些极快的东西。

标签: swift afnetworking nsprogress


【解决方案1】:

问题在于 pathUrl 计算属性。如果您打印 URL(而不是 url.path),您会看到您的 URL 无效。那是因为您使用的是NSURL(string:),而对于文件URL,您应该使用NSURL(fileURLWithPath:)。因此:

var pathUrl: NSURL {
    let documentsFolder = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first!
    let documentsURL = NSURL(fileURLWithPath: documentsFolder)
    return documentsURL.URLByAppendingPathComponent("file.pdf")
}

或者,更好的是,完全绕过路径,并使用URLForDirectory 获取.DocumentDirectory 作为 URL:

var pathUrl: NSURL {
    return try! NSFileManager.defaultManager().URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: false)
        .URLByAppendingPathComponent("test.pdf")
}

或者在 Swift 3 中:

var pathUrl: URL {
    return try! FileManager.default.urlForDirectory(.documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
        .appendingPathComponent("test.pdf")
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    相关资源
    最近更新 更多