0

私は何かを設計するための最良の方法を見つけようとしています。私は iPhone アプリを作成していますが、ほとんどの場合、Web サービスへの非同期呼び出しを使用しています。これは、URLConnection を設定し、start を呼び出して、データが利用可能になるか例外が発生したときにコールバックできるようにすることを意味します。これはうまく機能し、物事を処理する正しい方法だと思います。

例えば:

Web サービスから人のリストをリクエストします。結果のリストは、XmlDelegate によって object-c の「Person」オブジェクトに変換される Xml Person 要素です。

人物を取得する関数を呼び出すときは、「PersonReceived:(Person *)p」という単一の関数を持つプロトコルである「PersonResultDelegate」を渡します。したがって、完全な Person オブジェクトを取得するたびに、そのメソッドを呼び出すと、すべてがうまくいきます。したがって、私の詳細ビュー (または検索結果ビュー) は、利用可能な要素を受け取るだけです。

問題は、複数の特定のオブジェクトを取得する必要がある場合に発生します。私の特定のケースでは、人の最初と最後の予定を取得する必要があります。したがって、これら 2 つの単一の Appointment オブジェクトを取得するには、2 つの API 呼び出しを行う必要があります。各 Appointment オブジェクトは、登録された AppointmentResultDelegate への呼び出しになりますが、どれが最初でどれが最後かをどうやって知るのでしょうか? また、「最初」または「最後」の予定がなく、デリゲートが呼び出されない場合にも、何らかの方法で処理する必要があります。

これを処理するための設計上の正しい方法は何でしょうか? デリゲートのハンドルに返される最初のリクエストに追加のコンテキスト情報を追加する必要がありますか? 最初の呼び出しを行った人だけが意味を持つ不透明なデータですか? 他のオプションは何ですか?

解決

私が実際にやったことは、不透明なデータを Appointment と共にデリゲートに渡すことです。したがって、予定オブジェクトをリクエストすると、次のようなメソッドがあります。

getNextAppointment withDelegate:self withContext:@"next"
getPrevAppointment withDelegate:self withContext:@"prev"

このようにして、代理人が呼び出されたときに、どの予定が配信されているかがわかります。

4

1 に答える 1

0

「各 Appointment オブジェクトは、登録された AppointmentResultDelegate への呼び出しになりますが、どれが最初でどれが最後かをどうやって知るのでしょうか?」

これらのコールバックを受け取る順序を確認します。または、その xml データの値を調べます。シーケンスまたはデータのように。もちろん、私はあなたのデータを知りません。

于 2010-02-01T21:37:32.397 に答える