使用GCD执行sudzc webservice

我对GCD有些困惑

我尝试调用一个类来执行我的web服务调用:

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方法。

我有Sudzc操作阻塞主线程的问题。 但是,肥皂请求不是问题,因为虽然NSURLRequest在主线程上执行,但其数据由委托didReceiveData

什么阻止了我的用户界面是处理收到的XML处理方法中发生的。

在处理程序方法( - (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]]; }); 

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

您应该查看Sync-Async模式。 从这个SO的答案的两个链接将有所帮助。 它不直接使用GCD。 但是你可以很容易地适应。