2011-07-06 12 views
0

私はアイコンプロジェクトのObjective Cを学ぶJava開発者です。私の質問はCocoaのOOPデザインです。私は、Webサービスと通信し、xmlを受け取るビューベースのアプリケーションを持っており、を解析し、適切なビューコンポーネントをマップします(例えば、日付がdatepickerで質問を表示する場合、質問に2つの値がセグメント化されたコントロール、より多くの場合はpickerviewなど)多くのページを持つ動的な質問です。アイフォンアプリケーション、オブジェクト指向設計のアイデア

ココアのフレームワークを考慮して、ここで可能な最良のデザインは何ですか?たとえば、Webリクエストを行うための "Connection"というクラスを作成した場合、ViewControllerクラスから接続オブジェクトを作成して使用できますか?または私のような方法が挙げられるだろう私のクラスthat..becauseためdelegeteクラスを使用する必要があります。

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 
[webData setLength: 0]; 
} 

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 
[webData appendData:data]; 
} 

実装方法のこの種は、上記のViewControllerクラスに置かれている必要がありますか?

また、関連するUIビューコンポーネントへのXMLレスポンスのマッピングの設計を行うにはどうすればよいですか?私は可能な限りオブジェクトの向きとしてコードを作成したいと私のビューコントローラクラスでelses場合はあまりにも多くはないが、代わりに必要なビューコンポーネントでいっぱいになると言う "uiviewオブジェクト"を受け取る必要があり、それが表示されます。マッピングと推論は別の場所で行う必要があります。私はそれを行うことができますし、どこにメソッドを置くことができますか?

-(NSInteger)pickerView:(UIPickerView *)pickerView 
numberOfRowsInComponent:(NSInteger)component 
{ 
return [itemArray count]; 
} 

これはコントローラクラス内にある必要がありますか?どうすればこのメソッドにアクセスできますか?

私は自分自身を明確にすることができました。

答えて

1

パート1では、サービスとの通信やデータの解析を処理するファクトリ/エンジンクラスを作成するように思えます。そのクラスヘッダー宣言では、ビューコントローラーがデリゲートメソッド用に実装するプロトコル(Javaのインターフェース)を作成したいと思うでしょう。このクラスには、コールバック用のデリゲートオブジェクトを保持するタイプidのメンバーもあります。

パート2に答えるには、ファクトリ/エンジンクラスで解析中にオブジェクトを実際に作成し、そのデリゲート呼び出しでビューコントローラに戻すことができます。

+0

ありがとう、これは面白いと思いますが、パート1でもっと説明していただけますか?どのようにプロトコルがどのように見えるでしょうか?ビューコントローラはどれくらいありますか?(私は1つだけですが)どのようにしてオブジェクトを保持するのですか?これは接続専用か、すべてのオブジェクト代理人用ですか? tnx – Spring

1

あなたの説明は明確です。はい。ビューコントローラは、モデルオブジェクトとビューの間のインターフェイスを作成します。モデル値が変更されたときにビューを更新する役割を果たし、ユーザーイベントに応答してモデルを更新します。

NSURLConnectionオブジェクトのデリゲートである限り、デリゲートメソッドはビューコントローラ内にある可能性がありますが、デリゲートとして設定する任意のオブジェクトである可能性があります。もちろん、このオブジェクトが必要なデリゲートメソッド。

私の意見では、より良いデザインはありません。私は通常、ビューコントローラオブジェクトをNSURLConnectionのデリゲートとして設定します。

2番目の質問については、私はデザインについて与えるアドバイスはありません。このようなシステムを想像するのはちょっと難しいですし、どのソリューションを使うのが良いか分かりません。 文字列を含むインデックス付き配列を使用できます。インデックスは使用可能な回答の数を表し、文字列は使用するオブジェクトのクラス名です。

幸運。

+0

私のビューcontrolelrクラスは、すべてのオブジェクト代理メソッドのホームになりますか?任意のクラスでNSURLConnectionオブジェクトを作成すると、そのクラスにのみデリゲートメソッドを配置できますか?最後の文章をもう少し説明できますか? 「使用するオブジェクトのクラス名」はどういう意味ですか? tnx – Spring

+1

すべてのデリゲートメソッドではないかもしれませんが、少なくとも接続を管理する必要がある人です。通常、ビューコントローラにはテーブルビューのデリゲートメソッドも含まれています...文字列を使用してオブジェクトを表現することができます。整数定数を設定し、配列のコンポーネントにクラス名を設定してください。例えば、2つの答えの質問は、文字列を取得し、コンポーネントをinstanciate –

関連する問題