0

ASIHTTPRequest ライブラリを使用して HTTP 要求を開始するメソッド (getAllTeams:) があります。

NSURL *httpURL = [[[NSURL alloc] initWithString:@"/api/teams" relativeToURL:webServiceURL] autorelease];

ASIHTTPRequest *request = [[[ASIHTTPRequest alloc] initWithURL:httpURL] autorelease];
[request setDelegate:self];
[request startAsynchronous];

私ができるようにしたいのは、呼び出し[WebService getAllTeams]て結果を NSArray に返すことです。現時点では、HTTP 応答が requestFinished: メソッドで評価されるため、getAllTeams は何も返しません。

[WebService getAllTeams]理想的には、 を呼び出し、応答を待って、それを NSArray にダンプできるようにしたいと考えています。これは使い捨てクラス (値を格納せず、値を取得するだけ) であり、複数のメソッドが同じ requestFinished を使用するため (すべて配列を返す)、プロパティを作成したくありません。

デリゲートと NSNotifications について少し調べましたが、どちらが最善のアプローチであるかはわかりません。セレクターをパラメーターとして渡すことによるコールバックの実装に関するこのスニペットを見つけましたが、うまくいきませんでした (requestFinished が独立して発生するため)。

助言がありますか?正しい方向に向けられるだけでもありがたいです。

NSArray *teams = [[WebService alloc] getAllTeams];(getAllTeams は何も返さないため、現在は機能しませんが、requestFinished は返すためです。requestFinished の結果を取得し、それを getAllTeams に戻したい:)

4

1 に答える 1

0

呼び出しとともに元のクラス インスタンスへの参照を送信します。

[WebService getAllTeams:self];

次に-getAllTeams、元のインスタンスへの参照を受け入れるように変更します。

- (void) getAllTeams:(id)sender {
    // ...
    [request setDelegate:sender];
    // ...
}

元のインスタンスは、応答の処理とメモリのクリーンアップを担当します。

于 2010-05-20T23:58:49.240 に答える