2017-05-29 49 views
1

我想,因爲它涉及到處理數據,所以我instiated像這樣一個URL會話:URLSessionDelegate功能不會被調用

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

可能重複的[NSURLSessionDataDelegate方法didReceiveData和別人不叫(https://stackoverflow.com/questions/27828593/nsurlsessiondatadelegate-method-didreceivedata-and-others-are-not-called) – jegadeesh

+0

技術上是可以的,但在這種情況下,在這種情況下提供的接受解決方案在這種情況下將不起作用,因爲我發現在找到明顯答案之前,困難的方式在我的桌子上打了我幾個小時的頭。 –

回答

0

這不起作用的原因是您正在使用完成處理程序創建數據任務。相反,您必須改用dataTask(with:)函數。

我也錯過了這個文檔,花了好幾個小時想知道爲什麼我的委託方法沒有被調用。

從文檔:

通過使用完成處理程序,任務繞過調用委派響應和數據的遞送方法,而是提供了完成處理程序內部的任何所得 NSData的,URLResponse和NSError對象。但是,處理認證挑戰的委託方法仍然被調用。