首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSURLSessionDataTask和处理程序块

NSURLSessionDataTask和处理程序块
EN

Stack Overflow用户
提问于 2014-01-16 12:52:18
回答 4查看 911关注 0票数 0

我正在开发一个从服务器获取json数据的库,并且使用NSURLSessionDataTask。为了测试我的库,我创建了一个调用此库方法的新项目。

代码语言:javascript
复制
typedef void (^CompletionBlock)();
// More stuff...
- (void)downloadAllPodcastsMetadataWithCompletionHandler:(CompletionBlock)block{

   NSURL *url = [NSURL URLWithString:@"MyServerURL"];

   NSURLSessionDataTask *dataTask = [self.session dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
     // Connection and response handling stuff...
     // When my data is saved, executes the block parameter

     dispatch_async(dispatch_get_main_queue(), ^{
        block();
     });
   }
   [dataTask resume];
}

编辑:--我忘了把dataTask简历放在这里,但它在我的代码中。抱歉的。

编辑2:所以,正如你们中的一些人所说,我用dispatch_async更改了dispatch_sync。但结果是一样的:

在我的测试项目中,我这样称呼这个方法。

代码语言:javascript
复制
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

[manager downloadAllPodcastsMetadataWithCompletionHandler:^{
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}];

但是网络活动指示器从不炫耀。这就像块参数从未执行过一样。

这是因为它在库中执行NSURLSessionDataTask逻辑,然后我应该使用其他的东西而不是dispatch_sync

我已经检查过NSURLSessionDataTask not executing the completion handler block了,我想我也这么做了。如果有帮助的话,管理器就是Singleton。有什么想法吗?

谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-01-17 10:33:34

我是哑巴。

我之前的代码中有一个错误,我没有注意到,所以完成块war永远不会执行。当有人对他的代码过于自信时,就会发生这种情况。

抱歉打扰你了。

票数 0
EN

Stack Overflow用户

发布于 2014-01-16 13:01:24

您需要从[dataTask resume];开始下载。

票数 0
EN

Stack Overflow用户

发布于 2014-01-16 13:05:24

您需要添加dataTask简历;并将其添加到完成处理程序dispatch_async(dispatch_get_main_queue(),^{ UIApplication = NO;})中;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21162350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档