ios - 通过 URLSessionUploadTask 响应数据

标签 ios json swift xcode urlsession

我正在编写简单的处理程序,用于与服务器(当前为本地)上的 REST API 进行通信。到目前为止,从/向服务器下载和上传数据一切顺利。

我现在想要实现的是能够处理上传数据后服务器返回的JSON响应。这条消息是这样的:

{"message":"Record successfully added.","recordID":30}

recordID 对我来说很重要,因为我需要将它分配给相关的 NSManagedObject。我使用委托(delegate)态度而不是 completionHandler 这样我就可以管理上传的进度。适当的委托(delegate)类使用所有方法实现这些协议(protocol):

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()

处理数据的委托(delegate)函数:

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 以这种方式受到限制。有什么建议吗?

谢谢

最佳答案

我可能找到了答案,只需将其添加到 URLSession:dataTask:didReceiveResponse:completionHandler: 委托(delegate)方法即可。

completionHandler(URLSession.ResponseDisposition.allow)

我在 this thread. 中找到了解决方案

关于ios - 通过 URLSessionUploadTask 响应数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44368559/

相关文章:

ios - 尝试通过 CocoaPods 安装 ParseUI 时出现奇怪的错误

Python数据上传错误

JSON - Spring MVC : How to post json data to spring MVC controller

Django tastypie 将 DecimalField 序列化为 json 字符串而不是数字

正则表达式,忽略字符串中可能出现的匹配项

ios - 从后台 URLSession 帖子中获取响应

ios - 不能继承 UIButton : Must call a designated initializer of the superclass 'UIButton'

ios - 如何使用star micronics SDK打印欧元符号?

iphone - 应用程序中分配了很多内存,如何解决?

ios - 如何让 dispatch_async 运行