未调用 NSURLSessionDataTask 完成处理程序块

Posted

技术标签:

【中文标题】未调用 NSURLSessionDataTask 完成处理程序块【英文标题】:NSURLSessionDataTask completion handler block is not called 【发布时间】:2016-02-18 17:42:19 【问题描述】:

下面是我的代码

      NSURL *serverUrl =[NSURL URLWithString:urlString];


NSURLSession *session=[NSURLSession sharedSession];
NSURLSessionDataTask *sessionTask =[session dataTaskWithURL:serverUrl completionHandler:^(NSData *data,NSURLResponse *response,NSError *errror)


    NSString *returnedString =[NSString stringWithUTF8String:[data bytes]];

    NSLog(@"returnedString %@",returnedString);


    NSError *parseError;

    NSArray *jsonArray=[NSJSONSerialization JSONObjectWithData:data options:0 error:&parseError];
    NSLog(@"jsonArray %@",jsonArray);


];
[sessionTask resume];

Completion Handler 块没有被执行。如果我保留断点并检查直到 NSURLSessionDatatask 它工作得很好。一旦它到达完成处理程序块,断点就会跳转到 [datatak resume] 行。这是我的问题。

【问题讨论】:

【参考方案1】:

completionHandler 不会立即执行,就像名字听起来一样,它只会在任务完成后执行。

所以它的正常行为是不立即执行完成处理程序并转到下一行。

【讨论】:

我的回复没有打印出来。没有得到服务器的响应。 在 completionHandler 块中放一个断点并检查你得到的数据是什么。

以上是关于未调用 NSURLSessionDataTask 完成处理程序块的主要内容,如果未能解决你的问题,请参考以下文章

appdelegate 中的 NSURLSessionDataTask

如何从 NSURLSessionDataTask 完成处理程序返回 NSData

为啥我的 NSURLSession dataTask 多次调用服务器?

如何从NSURLSessionDataTask完成处理程序返回NSData

NSURLSessionDataTask 内存警告应用程序崩溃

使用 NSURLSessionDataTask 显示文件下载进度