Я пишу простой обработчик для связи с REST API на сервере (в настоящее время локальный). Пока все идет хорошо с загрузкой и выгрузкой данных с/на сервер.
Сейчас я пытаюсь добиться того, чтобы иметь возможность обрабатывать ответ JSON, возвращаемый сервером после загрузки данных. Это сообщение примерно такое:
{"message":"Record successfully added.","recordID":30}
Для меня важен recordID, потому что мне нужно назначить его соответствующему NSManagedObject. Я использую отношение делегирования вместо завершенияHandler, чтобы я мог управлять ходом загрузки. Соответствующий класс делегата реализует эти протоколы со всеми методами:
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 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 ограничен таким образом. Какие-либо предложения?
Спасибо