Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSURLSession post:uploadTask和dataTask之间的差异_Ios_Http_Post_Background Process_Nsurlsession - Fatal编程技术网

Ios NSURLSession post:uploadTask和dataTask之间的差异

Ios NSURLSession post:uploadTask和dataTask之间的差异,ios,http,post,background-process,nsurlsession,Ios,Http,Post,Background Process,Nsurlsession,以下是我的两个例子: let config = NSURLSessionConfiguration.defaultSessionConfiguration() config.HTTPAdditionalHeaders = ["Accept": "application/json", "Content-Type": "application/json",

以下是我的两个例子:

let config = NSURLSessionConfiguration.defaultSessionConfiguration()
        config.HTTPAdditionalHeaders = ["Accept": "application/json",
                                        "Content-Type": "application/json",
                                        "User-Agent": UIDevice.currentDevice().model]


        var request = NSMutableURLRequest(URL: NSURL(string: "http://XXX"))
        request.HTTPMethod = "POST"

        let valuesToSend = ["key":value, "key2":value]
        var error: NSError?
        let data = NSJSONSerialization.dataWithJSONObject(valuesToSend, options:NSJSONWritingOptions.PrettyPrinted, error: &error)
        request.HTTPBody = data

        if error == nil {
            let task = NSURLSession(configuration: config).dataTaskWithRequest(request,
                completionHandler: {data, response, error in

                if error == nil {
                    println("received == \(NSString(data: data, encoding: NSUTF8StringEncoding))")
                }
            })

            task.resume()

        } else {
            println("Oups error \(error)")
        }
第二个呢

let config = NSURLSessionConfiguration.defaultSessionConfiguration()
        config.HTTPAdditionalHeaders = ["Accept": "application/json",
                                        "Content-Type": "application/json",
                                        "User-Agent": UIDevice.currentDevice().model]


        var request = NSMutableURLRequest(URL: NSURL(string: "http://XXX"))
        request.HTTPMethod = "POST"

        let valuesToSend = ["key":value, "key2":value]
        var error: NSError?
        let data = NSJSONSerialization.dataWithJSONObject(valuesToSend, options:NSJSONWritingOptions.PrettyPrinted, error: &error)

        if error == nil {

            let task = NSURLSession(configuration: config).uploadTaskWithRequest(request, fromData: data,
                completionHandler: {data, response, error in

                if error == nil {
                    println("received == \(NSString(data: data, encoding: NSUTF8StringEncoding))")
                }
            })

            task.resume()


        } else {
            println("Oups error \(error)")
        }
所以我想知道:这两个例子之间有什么区别,对我来说更好的例子(简单的帖子和接收)又有什么区别

这两个人在后台没有?那么?

来自:

dataTaskWithRequest:

基于指定的URL请求对象创建HTTP请求<代码>- (NSURLSessionDataTask*)dataTaskWithRequest:(NSURLRRequest*)request 参数

请求

提供特定于请求的信息(如URL)的对象, 缓存策略、请求类型和正文数据或正文流

返回值

新会话数据任务

讨论

创建任务后,必须通过调用其resume来启动任务 方法

可用性

在iOS 7.0及更高版本中提供

NSURLSession.h


uploadTaskWithRequest:fromData:

为指定的URL请求对象创建HTTP请求,并 上载提供的数据对象<代码>-(NSURLSessionPloadTask *)uploadTaskWithRequest:(NSURLRequest*)来自数据的请求:(NSData*)bodyData 参数

请求

提供URL、缓存策略和请求的
NSURLRequest
对象 类型,等等。此请求对象中的正文流和正文数据 都被忽略了

车身数据

请求的正文数据

返回值

新会话上载任务

讨论

创建任务后,必须通过调用其
resume
方法

可用性

在iOS 7.0及更高版本中提供

NSURLSession.h

此外,他还说:

NSURLSessionDataTask

此任务发出HTTP GET请求,以从服务器中提取数据。这个 数据以
NSData
的形式返回。然后将转换此数据 到正确的类型
XML
JSON
UIImage
plist
,等等

NSURLSessionDataTask *jsonData = [session dataTaskWithURL:yourNSURL
      completionHandler:^(NSData *data,
                          NSURLResponse *response,
                          NSError *error) {
        // handle NSData
}];

NSURLSessionUploadTask

当您需要将某些内容上载到web服务时,请使用此类 使用
httppost
PUT
命令。任务的代表也可以 允许您在传输网络流量时监视网络流量

上载图像:

NSData *imageData = UIImageJPEGRepresentation(image, 0.6);

NSURLSessionUploadTask *uploadTask =
  [upLoadSession uploadTaskWithRequest:request
                              fromData:imageData];
在这里,任务是从会话中创建的,图像上传为
NSData
。也有使用文件或流上传的方法


但是,您的问题仍然很模糊,范围太广,因为您没有解释一个明确、具体的问题,您可以通过搜索一点来轻松找到这些信息。

您是否尝试过使用它们并在实际编译的代码中看到实际效果?是的。它是在一个实际的项目上检查用户身份验证。我没有看到任何不同。这里是HTTP新手。。。如果我发出一个
dataTaskWithRequest()
,传递一个配置为
POST
的请求,会发生什么情况?我第一次通过https向服务器发送凭据,以获取令牌。我将凭证(JSON)附加到请求主体,并为整个
NSURLSession
设置Authroization头。上载任务答案中的示例代码使用图像负载。我不知道这是否适用于我的情况,但我仍然想使用
POST
@NicolasMiari:“数据任务使用NSData对象发送和接收数据。数据任务用于从应用程序到服务器的简短且通常是交互式的请求。数据任务可以在接收到每一条数据后,一次将一条数据返回到应用程序,也可以通过完成处理程序一次将所有数据返回到应用程序。“看吧,是的,你可以用它。我认为这个问题一点也不含糊。问题在于发布的确切代码,以及在URLRequest中使用dataTask传递JSON正文数据与在uploadTask中传递JSON正文数据是否有区别。苹果文档中没有明确的答案,如果在这方面存在差异或建议。