使用GCD执行sudzz webservice

时间:2012-07-06 09:28:05

标签: iphone objective-c ios sudzc

我对GCD感到有点困惑

我尝试对执行webservice调用的类进行调用:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        [searchService doSearch:self.searchData];
});

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

 [service doSearch:self action:@selector(doSearchHandler:) e: searchArgs];

一旦通话结束,我应该回到:

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

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

2 个答案:

答案 0 :(得分:1)

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

管理

阻止我的UI的是处理在Handler方法中发生的接收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知道处理已经结束。

答案 1 :(得分:0)

您应该查看同步 - 异步模式。来自SO答案的两个链接将有所帮助。它不直接使用GCD。但你可以很容易地适应。