菜鸟教程小白 发表于 2022-12-13 09:00:51

ios - 将 NSURLConnection 转换为 NSURLSessionUploadTask 示例


                                            <p><p>大家好,提前感谢您在理解如何将一些 NSURLConnection 代码转换为较新的 NSURLSession 方面提供的任何帮助。
我正在尝试做的是向服务器发出 POST 请求,并发送一个为 key “照片”编码的照片库 64。</p>

<p>下面我有一个用 NSURLConnection 编写的工作示例,我想将其转换为 NSURLSession。</p>

<p>正如我在苹果文档中所读到的那样,我应该使用数据任务,因为在我的情况下,它是一个图像,如果它是像视频这样较大的传输,我应该使用上传任务。</p>

<p>关于上传任务我找到了下一个<a href="http://www.raywenderlich.com/51127/nsurlsession-tutorial" rel="noreferrer noopener nofollow">tutorial</a>但问题是,在我的情况下,我还设置了一个标题,而且我的内容类型应该是 multipart/form-data。 </p>

<pre><code>NSURL *url = ;
    NSMutableURLRequest *request = [ initWithURL:url];

    ;

    ;
    ;
    ;
    ;
    ;

    ];

    [NSURLConnection sendAsynchronousRequest:request
                                       queue:
                           completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){

                               NSHTTPURLResponse *httpResp = (NSHTTPURLResponse*) response;

                               NSError *jsonError;

                               if(httpResp.statusCode == 200){
                                 NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data
                                                                                        options:NSJSONReadingAllowFragments
                                                                                          error:&amp;error];


                                 if (!jsonError) {

                                       [ setObject: forKey:@&#34;avatarLink&#34;];
                                       [ synchronize];

                                 }


                               }
                               else {

                                 NSString *errorCode = ;
                                 ;

                               }


                           }];
</code></pre>

<p>我想提一下,我尝试使用 Ray Wenderlich 教程构建一个工作示例,但我在设置标题的方式方面遇到了错误</p>

<p>提前感谢您提供的任何帮助!</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我正在使用我编写的一个简单的 HTTPClient 类,但不幸的是它目前不支持上传任务。但下面我提出了一种创建此类上传任务的方法。我的客户端维护对 NSURLSession 的引用和正在运行的任务字典(键是任务本身,值是接收到的 NSData)作为异步处理(可能不止一个) session 任务的响应数据接收的一种方式。为了工作,我的客户实现了以下协议(protocol):.
我将按如下方式创建上传任务:</p>

<pre><code>- (NSURLSessionTask *) startUploadTaskForURL: (NSURL *) url withData: (NSData *) data {
NSMutableURLRequest *request = ;
;
;
NSURLSessionUploadTask uploadTask = ;
;
return task;
}

- (void) scheduleTask: (NSURLSessionTask *) task {
    forKey:task];
    ;
}

- (NSMutableData *) dataForTask: (NSURLSessionTask *) task {
    return ;
}

- (void) URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data {
    NSString *dataString = [ initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@&#34;HTTPClient: Data task received data: %@&#34;, dataString);
    NSMutableData *runningData = ;
    if (!runningData) {
      NSLog(@&#34;No data found for task&#34;);
    }
    ;
}

- (void) URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {
    NSLog(@&#34;HTTPClient: Task completed with error: %@&#34;, error);
    // my client also works with a delegate, so as to make it reusable
    ];
}

- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didSendBodyData:(int64_t)bytesSent totalBytesSent:(int64_t)totalBytesSent totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend {
    NSLog(@&#34;HTTPClient: did send body data: %lld of %lld bytes &#34;, totalBytesSent, totalBytesExpectedToSend);
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 将 NSURLConnection 转换为 NSURLSessionUploadTask 示例,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/31362790/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/31362790/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 将 NSURLConnection 转换为 NSURLSessionUploadTask 示例