0

ASIHTTPRequest非同期でURLを取得する場所を使用して単純なライブラリを作成しています。私の問題はmain、非同期呼び出しが終了する前に、libをテストするために作成した関数が終了することです。

私はObjCとiPhoneの開発に非常に慣れていませんが、メイン機能ですべてのリクエストが完了するまで待つ良い方法を誰かが提案できますか?

現在、私のmain関数は次のようになっています-

int main(int argc, char *argv[]) {
  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
  IBGApp *ibgapp = [[IBGApp alloc] init];
  IBGLib *ibgl = [[IBGLib alloc] initWithUsername:@"joe" andPassword:@"xxx"];

  // The two method calls below download URLs async.
  [ibgl downloadURL:@"http://yahoo.com/" withRequestDelegate:ibgapp andRequestSelector:@selector(logData:)];
  [ibgl downloadURL:@"http://google.com/" withRequestDelegate:ibgapp andRequestSelector:@selector(logData:)];

  [pool release];
  return 0; // I reach here before the async calls are done.
}

では、非同期呼び出しが完了するまで待つための最良の方法は何ですか?寝てみましたが、明らかにうまくいきません。

4

2 に答える 2

2

これらの要求を同期的に実行するように ASIHTTPRequest オブジェクトに指示することもできます。

[request startSynchronous];
于 2010-05-25T19:14:58.257 に答える
1

シンプルで汚い解決策は、[プールの解放] の前にループを追加することです。ライン。通り。このような:

while(1){
    if ([ibgl requests_finished]){
        break;
    }
}

もちろん、requests_finished boolean を IBGLib クラスに追加し、ダウンロードが終了したら true (YES) にする必要があります。リクエストの失敗を処理することを忘れないでください:)。

于 2010-05-25T09:32:17.360 に答える