Iphone 使用GCD执行sudzc Web服务

Iphone 使用GCD执行sudzc Web服务,iphone,objective-c,ios,sudzc,Iphone,Objective C,Ios,Sudzc,我对GCD有点困惑 我尝试校准执行webservice调用的类: dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [searchService doSearch:self.searchData]; }); 我正在使用Sudzc生成的Web服务。对Sudzc生成的服务的实际服务调用位于SearchService类中,如下所示: [service doSearch:s

我对GCD有点困惑

我尝试校准执行webservice调用的类:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        [searchService doSearch:self.searchData];
});
我正在使用Sudzc生成的Web服务。对Sudzc生成的服务的实际服务调用位于SearchService类中,如下所示:

 [service doSearch:self action:@selector(doSearchHandler:) e: searchArgs];
通话结束后,我应返回:

- (void) doSearchHandler: (id) value {
}

如果不使用GCD,它可以正常工作,但是当我添加它时,我永远不会返回到doSearchHandler方法。

您应该查看同步异步模式。这两个链接的答案将有所帮助。它不直接使用GCD。但是您可以轻松适应。

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

阻止我的UI的是在处理程序方法中处理接收到的XML

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

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]];

});

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

如果使用dispatch\u get\u main\u queue()这很有效,我正确地获取了数据,但图形界面在操作完成之前是冻结的,这是我的核心问题。太棒了!非常感谢!