所以我很难理解一些事情。这是我对 NSURSession 的理解:
一般来说,我有 2 个选项(据我所知)DataTask(ex dataTaskWithRequest)和DownloadTask(ex DownloadTaskWithRequest ) - 使用他们的委托方法,或使用完成处理程序,不能两者都做。我已经设法使用 dataTaskWithRequest 接收数据,如下所示:
let request = NSMutableURLRequest(URL: dataSourceURL!) request.HTTPMethod = "POST" let postString = "lastid=\(id)" request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding) let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in if error != nil { println("error=\(error)") return } if data != nil { println("works") //Handle data } //println("response = \(response)") } task.resume()
它完美地工作。问题是我需要将数据下载到磁盘而不仅仅是内存(我正在下载图像)。因此,我对DownloadTaskWithRequest + 他的完成处理程序进行了相同的尝试,我注意到他采用的参数与第一个参数相同,即NSURL和DataTaskWithRequest中的NSData,因此它使事情变得非常简单。前任。
let task2 = NSURLSession.sharedSession().downloadTaskWithRequest(request, completionHandler: { (location : NSURL!, response : NSURLResponse!, error : NSError?) -> Void in
if error != nil {
return
}
//How do I get the data??
})
task2.resume()
我的问题是:我知道我可以使用以下方法从 Location(NSURL) 中获取数据:
var data = NSData(contentsOfURL: location)
1)contentsOfURL会发出另一个“请求”来获取这些数据,还是他在本地工作?如果它再次发送请求,我该如何避免它?
2)这是正确的方法(我知道我可以使用委托方法,我不喜欢)?
3)如何在本地存储我下载的数据(在回答第 1 和第 2 个问题后),并在需要时访问它?
感谢你们!!抱歉新手问题,我真的很关心效率 - 谢谢!