我正试图从web服务器加载一个JSON文件。以下是我如何开始请求的:

let url:NSURL? = NSURL(string: lookupUrlFragment + query)

// Check if an actual url object was created
if let actualUrl = url {

    // Create a default NSURLSessionConfiguration
    let sessionConfig:NSURLSessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration()

    // Create a default session
    let session:NSURLSession = NSURLSession(configuration: sessionConfig)

    session.dataTaskWithURL(actualUrl, completionHandler: {
        (data:NSData?, response:NSURLResponse?, error:NSError?) in
        NSLog("Got data = \(data)")
        NSLog("Got response = \(response)")
        NSLog("Got error = \(error)")
        self.searchResults = data
        self.delegate?.searchResultsAreReady()
   })
}

我已经用调试器遍历了这段代码。当它调用dataTaskWithURL()时,实际Url的值是正确的。如果我从web浏览器中点击它,就会得到JSON文件。但完成处理程序永远不会被调用。它从不在我在完成处理程序中设置的断点处停止,调试器日志中也不会显示任何输出。
我已经在一个单独的函数而不是闭包中使用了完成处理程序,但是行为是相同的。
有人能告诉我为什么我的完成处理程序没有被调用吗?

最佳答案

你忘了打电话给resume()

let session:NSURLSession = NSURLSession(configuration: sessionConfig)

let task = session.dataTaskWithURL(actualUrl, completionHandler: {
    (data:NSData?, response:NSURLResponse?, error:NSError?) in
    NSLog("Got data = \(data)")
    NSLog("Got response = \(response)")
    NSLog("Got error = \(error)")
    self.searchResults = data
    self.delegate?.searchResultsAreReady()
})
task.resume() // you miss this

10-08 07:46