使用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。 但是你可以很容易地适应。