NSURLSession委托与completionHandler

安德鲁·SB

我一直使用补全处理程序。随着NSURLConnection现在有了NSURLSession这导致我的代码非常混乱,尤其是我在请求中有请求。

我想尝试使用委托NSURLSession来实现我已经完成的工作NSURLConnection

因此,我创建了一个NSURLSession,并创建了一个dataTask

NSURLSessionDataTask *dataTask = [overallSession dataTaskWithURL:url
                                                  completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                                                      if(error == nil)
                                                      {
                                                          NSString * text = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
                                                          NSLog(@"Data = %@",text);
                                                      }

                                                  }];

    [dataTask resume];

现在我有一个completionHandler响应,我将如何切换到代表来管理响应和数据?我可以dataTask从这个代表中添加另一个吗?使用由此dataTask创建并放置在会话中的cookie

奶牛

如果要添加自定义委托类,则至少需要实现NSURLSessionDataDelegateNSURLSessionTaskDelegate协议。

用的方法:

NSURLSessionDataDelegate-获取请求的连续状态

 - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response
 completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler {

    receivedData=nil; receivedData=[[NSMutableData alloc] init];
    [receivedData setLength:0];

    completionHandler(NSURLSessionResponseAllow);
}

NSURLSessionDataDelegate

-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask
   didReceiveData:(NSData *)data {

    [receivedData appendData:data];
}

NSURLSessionTaskDelegate

 - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task
didCompleteWithError:(NSError *)error {
 if (error) {
  // Handle error
 }
else {
   NSDictionary* response=(NSDictionary*)[NSJSONSerialization JSONObjectWithData:receivedData options:kNilOptions error:&tempError];
    // perform operations for the  NSDictionary response
}

如果您要将委托代码(中间层)与调用类分开(通常的优良作法是为网络调用提供单独的类/层),则NSURLSession的委托必须为:-

NSURLSession *session=[NSURLSession sessionWithConfiguration:sessionConfig delegate:myCustomDelegateClass delegateQueue:nil];

参考链接:

  1. NSURLSession类参考
  2. iOS NSURLSession示例(HTTP GET,POST,后台Downlads)
  3. 从NSURLConnection到NSURLSession

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

NSURLSession委托与completionHandler

来自分类Dev

未调用NSURLSession委托

来自分类Dev

未调用NSURLSession委托方法

来自分类Dev

使用NSURLSession委托进行授权

来自分类Dev

NSURLSession委托和完成处理程序

来自分类Dev

可以复制iOS的NSURLsession委托类

来自分类Dev

将委托作为参数传递给NSURLSession

来自分类Dev

委托方法中带有completionHandler ...的块的快速语法

来自分类Dev

委托方法中带有completionHandler ...的块的快速语法

来自分类Dev

无法在NSURLSession委托方法中更新用户界面

来自分类Dev

在Swift中下载NSURLSession期间未调用URLSession委托

来自分类Dev

无法从NSURLSession委托返回调用函数而不杀死任务

来自分类Dev

NSURLSession在完成的下载委托中剩余的后台时间

来自分类Dev

无法在NSURLSession委托方法中更新用户界面

来自分类Dev

Swift中这些NSURLSession方法的委托是什么?

来自分类Dev

无法从NSURLSession委托返回到调用函数而不杀死任务

来自分类Dev

NSURLSession自己作为init还是内部类的委托?

来自分类Dev

如何使用iOS 7的NSURLSession及其委托方法系列接受自签名SSL证书以进行开发?

来自分类Dev

NSAlert beginSheetModalForWindow:completionHandler:

来自分类Dev

NSAlert beginSheetModalForWindow:completionHandler:

来自分类Dev

CompletionHandler调用顺序

来自分类Dev

NSURLSession循环

来自分类Dev

NSURLSession超时

来自分类Dev

CABaseAnimation委托

来自分类Dev

委托与if陈述

来自分类Dev

通用委托

来自分类Dev

委托财产

来自分类Dev

UIscrollview委托

来自分类Dev

试图找出 Swift 中的 CompletionHandler?