我使用WSMakeStubs(在开发工具中)生成用于访问SOAP Web服务的存根代码。我对该对象的调用当前只是阻塞。当我尝试使用异步调用时,没有任何反应,我确信它与我对运行循环的理解有关。我初始化一个对象并尝试在这样的运行循环上安排它:
BeginPartnerSession *call = [[BeginPartnerSession alloc] init];
[call setParameters:kPartnerID in_Password:kPartnerPassword];
[call setCallBack:self selector:@selector(sessionIDRequestDidFinish:)];
[call scheduleOnRunLoop:[NSRunLoop currentRunLoop] mode:NSDefaultRunLoopMode];
[call release];
在运行循环上调度的存根调用如下所示:
- (void) scheduleOnRunLoop:(NSRunLoop*) runloop mode:(NSString*) mode
{
WSMethodInvocationScheduleWithRunLoop([self getRef], [runloop getCFRunLoop], (CFStringRef) mode);
}
对[self getRef]的调用返回一个设置了回调的调用对象。然后回调应该调用我的目标和选择器,但它在调用带有运行循环的调度后永远不会达到该断点。在运行循环调度中需要更改什么才能使其正常工作?
同步调用工作正常,所以我很确定这不是服务器问题。
答案 0 :(得分:0)
我终于将其分解为一个单独的项目,我可以将问题隔离开来。异步调用在那里工作得很好,这使得runloop对我很怀疑。事实证明这个问题与我将其作为iPhoto的插件运行这一事实有关。我只是改变了runloop模式,所以调用看起来像这样:
[call scheduleOnRunLoop:[NSRunLoop currentRunLoop] mode:NSRunLoopCommonModes];
然后调用了回调。瞧!