我正在編寫用於與服務器上的REST API通信的簡單處理程序(當前爲本地)。從下載和上傳服務器數據到目前爲止,一切順利。通過URLSessionUploadTask響應數據
我現在想要實現的是能夠處理上傳數據後服務器返回的JSON響應。此消息是這樣的:
{"message":"Record successfully added.","recordID":30}
重要的是對我的recordId,因爲我需要將其分配給相關的NSManagedObject。我使用委託態度代替completionHandler,這樣我就可以管理上傳的進度。適當的委託類實現這些協議的所有方法:
class ConstructoHTTPHelper:NSObject, URLSessionDelegate, URLSessionDataDelegate, URLSessionTaskDelegate, URLSessionDownloadDelegate, URLSessionStreamDelegate { ... }
這裏談到的問題,因爲據我創建上傳任務像這樣的東西:
let config = URLSessionConfiguration.default
self.session = URLSession(configuration: config, delegate: self, delegateQueue: OperationQueue.main) //URLSession(configuration: config)
var request:URLRequest = URLRequest(url:address)
request.httpMethod = "POST"
let data = // creation of data ...
let fileURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent("uploadData")
do {
try data.write(to: fileURL)
} catch {
// handling error
}
self.sessionUploadTask = self.session?.uploadTask(with: request, fromFile: fileURL)
self.sessionUploadTask!.resume()
用於處理數據的委託FUNC:
func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) {}
服務器返回永遠不會被稱爲。 什麼是奇怪,我是,當我使用完成處理類似下面,它輸出JSON得好:
self.sessionUploadTask = self.session?.uploadTask(with: request, from: data, completionHandler: { (data, response, error) in
print(NSString(data: data!, encoding: String.Encoding.utf8.rawValue)!)
})
因此,它看起來對我來說,uploadTask以這種方式限制。有什麼建議麼?
感謝
https://stackoverflow.com/a/44362939/5461400檢查這個@jan R. –
謝謝,但正如我在帖子中寫道它,完成處理工作正常,這對我來說......但我需要使用委託方法,而不是completionHandler,因爲能夠觀察會話的進度... –
https://stackoverflow.com/a/40503024/5461400在這裏檢查@Jan R. –