0

WSMakeStubs(開発ツール内)を使用して、SOAPWebサービスにアクセスするためのスタブコードを生成しました。オブジェクトに対して行った呼び出しは、現在ブロックされています。非同期呼び出しを使用しようとしても何も起こらず、実行ループの理解に関係していると確信しています。オブジェクトを初期化し、次のような実行ループでスケジュールしようとします。

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

私はついにこれを別のプロジェクトに分割し、そこで問題を切り分けることができました。非同期呼び出しはそこでうまく機能し、runloopを疑わせました。この問題は、私がこれをiPhotoのプラグインとして実行しているという事実に関係していることがわかりました。runloopモードを変更しただけなので、呼び出しは次のようになります。

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

次に、コールバックが呼び出されました。出来上がり!

于 2011-02-28T16:38:57.673 に答える