19
var session = NSURLSession.sharedSession()
session.dataTaskWithRequest(urlRequest, 
                            completionHandler: {(data: NSData!, 
                                                 response: NSURLResponse!,                       
                                                 error: NSError!) in
                                                      println(data)
                                                      println(response)
                                                      println(error)
                                               })

所以我提出了这个请求,并且永远不会调用完成块。

怎么了?

我也尝试了synchronous and asynchronous form相同的请求,NSURLConnection并且效果很好。

编辑:

我尝试为 分配一个dataTask变量session.dataTaskWithRequest并在之后立即显示它。它说这个<__NSCFLocalDataTask: 0xb41bda0> { suspended }暂停?为什么?

4

6 回答 6

55

所以我试着这样称呼它

session.dataTaskWithRequest(urlRequest, 
                        completionHandler: {(data: NSData!, 
                                             response: NSURLResponse!,                       
                                             error: NSError!) in
                                                  print(data)
                                                  print(response)
                                                  print(error)
                                           }).resume()

它奏效了。

好像我必须调用resume()一个默认的暂停会话任务。

于 2014-06-05T07:27:55.723 回答
7

你在用游乐场吗??

如果你是,你应该小心包括:

 XCPSetExecutionShouldContinueIndefinitely(continueIndefinitely: true)

为了让操场等待回调

于 2014-08-21T17:17:34.443 回答
5

我面临同样的问题,我解决了

NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * data, NSURLResponse * response, NSError * error) {

    if (!error)
    {
        NSLog(@"Data is %@",data);
        NSLog(@"Response is %@",response);
        NSLog(@"Error is %@",error);
    }
 }];

[dataTask resume];

并检查您是否已添加到App Transport Security Settings您的info.plist.

于 2016-12-27T06:46:23.783 回答
3

您也可以通过以下方式简单地使用它:-

let url = "api url"

let nsURL = NSURL

let task = NSURLSession.sharedSession().dataTaskWithURL(nsURL) {
(data, response, error) in
   // your condition on success and failure
}

task.resume()
于 2014-07-07T12:48:39.463 回答
1

这是一个相当独特的案例,但如果您在单元测试中使用 URLSession,则需要设置期望值。否则,您的测试用例将结束,并且您的请求似乎永远不会返回。斯威夫特 3.0.1。

    let expect = expectation(description: "dataTaskWithRequest - completes")

    if let url = URL(string: "https://www.google.com/") {

        let request = URLRequest(url: url)

        URLSession.shared.dataTask(with: request) { ( data, response, error) in

            print(data.debugDescription)
            print(response.debugDescription)
            print(error.debugDescription)

            expect.fulfill()

        }.resume()

        waitForExpectations(timeout: 10, handler: nil)
    }
于 2016-12-08T21:54:16.770 回答
0

在 Swift 2.x 中会是这样的

NSURLSession.sharedSession().dataTaskWithRequest(theRequest) { (data, response , error) in
    print(response)
}.resume()
于 2016-08-19T11:51:36.267 回答