2011-11-13 6 views
0

OK、私は、WebサービスからJSONデータを取得するために、またはWebサービスに投稿するために、いくつかの場所でASIHttpRequestを使用するアプリケーションを構築しています。私はそれが働いているが、実際には、さまざまなビューコントローラ(ログインビューコントローラ、テーブルビューコントローラ、および詳細ビューコントローラ)の周りに要求オブジェクトのいくつかのインスタンス化を振りかけるのが好きではない。私はすべてのASIHttpRequestメソッドを1つに移動したいWebサービスから返された値の辞書を返すだけです。この問題は、デリゲートメソッドが返さなければならないことを返さないということです。ASIHttpRequestおよびStoryboardでのログインビューコントローラの使用

私はどのようにすればよいでしょうか? HTTPRequestを作成するすべてのメソッドを統合し、リクエストが完了したときに値を返す

必要に応じてコードを投稿することができますが、これは一般的な質問であり、特定の問題ではありません。これがどうあるべきかについて私はそれを感謝します。私のコードを効率的かつきれいにしたい:

ありがとう!

答えて

0

あなたの問題は非同期です。私はあなたが統合によって何を意味するかは分かりませんが、要求を呼び出すためにシングルトン(あなたは単にアプリケーションデリゲートを使うことができます)を持つことができます。したがって、あなたは次のようなことを行います:

[(MyAppDelegateClass *)[UIApplication sharedApplication].delegate doLoginStuff:(NSDictionary *)params delegate:self]; 

このすべてを非同期で実行している場合、このメソッドを呼び出して何かを返すことはできません。 View Controllerに何らかのコールバックがあることに悩まされます。これは、ASIがそのままの状態で動作する方法です。せいぜい、要求を生成するコードを最小限に抑え、反復的なプロパティーを設定することができます。

全体的にインスタンス化を浮かべることが何を意味するのか分かりません。あなたが心配しているメモリであれば、同じオブジェクトを再利用することに違いはありません。 ASIは通常、自動解放されたリクエストを使用するため、「統合された」方法で作成することと同じです。それがクリーンなコードの場合、私はシングルトンの方法を行い、プレフィックスファイルで作成してインポートするユーティリティクラスのいくつかのタイプのショートカットcベースのメソッド呼び出しを作成します。しかし、もう一度、ビューコントローラにコールバックメソッドが必要なので、すでに動作するようになっているよりもはるかにクリーンではありません。私はあなたの痛みを共有します。

リクエストが戻ってきたら、ほとんどの場合、結果を解析するメソッドがあります。通常、私は1つのタイプのWebサービスしか扱っていないので、結果を解析して(また、デバッグ目的でNSLogにログする)メソッドを使用して、NSDictionaryまたはNSArrayを返します。

関連する問題