我想在处理数据时处理数据,所以我已经像这样开始了一个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);
}
但是,委托方法仍未被调用。
答案 0 :(得分:7)
这不起作用的原因是您使用完成处理程序创建数据任务。相反,您必须使用dataTask(with:)
函数。
我在文档中也错过了这个,花了好几个小时想知道为什么我的委托方法没有被调用。
来自文档:
通过使用完成处理程序,任务绕过调用委托方法进行响应和数据传递,而是提供任何结果 完成处理程序内的NSData,URLResponse和NSError对象。但是,仍然会调用用于处理身份验证质询的委托方法。