0

我使用 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] 的调用返回一个已设置回调的调用对象。然后回调应该调用我的目标和选择器,但是在使用运行循环调用调度后它永远不会到达那个断点。需要在运行循环调度中进行哪些更改才能使其正常工作?

同步调用工作正常,所以我很确定这不是服务器问题。

4

1 回答 1

0

我终于把它分解成一个单独的项目,在那里我可以隔离问题。异步调用在那里工作得很好,这让我怀疑运行循环。原来这个问题与我将它作为 iPhoto 的插件运行这一事实有关。我只是改变了运行循环模式,所以调用看起来像这样:

[call scheduleOnRunLoop:[NSRunLoop currentRunLoop] mode:NSRunLoopCommonModes];

然后回调被调用。瞧!

于 2011-02-28T16:38:57.673 回答