URLSessionDelegate函数未被调用

时间:2017-05-29 10:04:29

标签: ios swift uitableview

我想在处理数据时处理数据,所以我已经像这样开始了一个URL会话:

let session = URLSession(configuration: sessionConfiguration, delegate: self, delegateQueue: operationQueue);

我还将类设置为URLSessionDataDelegate:

class ViewController: UITableViewController, URLSessionDataDelegate{

最后,我实现了这样的didReceive数据函数:

func urlSession(_ session: URLSession,
                dataTask: URLSessionDataTask,
                didReceive data: Data){
    print(data)
}

但是,永远不会调用该函数。

我像这样运行会话:

let session1 = session.dataTask(with: url) { (data, response, error) in
    print(data!);
}

它打印来自回调的数据,但不打印来自委托的数据。非常感谢任何帮助。

编辑: 我还补充了以下内容:

func urlSession(_ session: URLSession,
                dataTask: URLSessionDataTask,
                didReceive response: URLResponse,
                completionHandler: @escaping (URLSession.ResponseDisposition) -> Void){
    completionHandler(URLSession.ResponseDisposition.allow);
}

但是,委托方法仍未被调用。

1 个答案:

答案 0 :(得分:7)

这不起作用的原因是您使用完成处理程序创建数据任务。相反,您必须使用dataTask(with:)函数。

我在文档中也错过了这个,花了好几个小时想知道为什么我的委托方法没有被调用。

来自文档:

  

通过使用完成处理程序,任务绕过调用委托方法进行响应和数据传递,而是提供任何结果   完成处理程序内的NSData,URLResponse和NSError对象。但是,仍然会调用用于处理身份验证质询的委托方法。