首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用GCD执行sudzc webservice

使用GCD执行sudzc webservice
EN

Stack Overflow用户
提问于 2012-07-06 17:28:05
回答 2查看 1.5K关注 0票数 0

我对GCD有点困惑

我尝试扩展一个类,在这个类中执行我的webservice调用:

代码语言:javascript
复制
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        [searchService doSearch:self.searchData];
});

我使用的是Sudzc生成的webservice。对使用Sudzc生成的服务的实际服务调用位于SearchService类中,如下所示:

代码语言:javascript
复制
 [service doSearch:self action:@selector(doSearchHandler:) e: searchArgs];

调用完成后,我应该返回到:

代码语言:javascript
复制
- (void) doSearchHandler: (id) value {
}

在不使用GCD的情况下,它工作得很好,但是当我添加它时,我再也不会返回到doSearchHandler方法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-20 23:40:50

我遇到了Sudzc操作阻塞主线程的问题。但是,Soap请求不是问题所在,因为尽管NSURLRequest是在主线程上执行的,但它的数据是由委托didReceiveData管理的

阻塞我的UI的是处理Handler方法中接收到的XML。

在处理程序方法(- (void) SudzcRequestHandler: (id) value { ...)中,我按如下方式处理数据:

代码语言:javascript
复制
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

...processing...

[[NSNotificationCenter defaultCenter] postNotificationName:KManagerHasFinishedLoading object:self userInfo:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:NOTIFICATION_RESULT_OK], @"Result", nil]];

});

我在Manager中运行处理,它是一个单例对象,但其他实现可能会有所不同。因此,该通知用于让我的ViewController知道处理已经结束。

票数 1
EN

Stack Overflow用户

发布于 2012-07-07 18:12:57

您应该研究一下同步-异步模式。此SO答案中的两个链接将有所帮助。它不直接使用GCD。但是你可以很容易地适应。

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

https://stackoverflow.com/questions/11359493

复制
相关文章

相似问题

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