0

ビューとビューコントローラの責任について混乱しています。

私はMVCに関するAppleのドキュメントを読みましたが、私の質問に答える明確な例を示していません。

データベースからデータを取得し、UITableViewを使用して表示するSimpleDatabaseアプリケーションがあります。

マイビューはカスタムビューです。これは基本的に、データベースから計算されたデータを表示するUIViewに隣接して表示されるUITableViewのコレクションです。

私のviewControllerは、すべてのUITableviewのデリゲートを実装します。

viewController内のすべてのUITableviewを含むコンテナビュー(UIVIew)があります:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:
(NSIndexPath *)indexPath
{

   UIView *containerForAllview = [tableview superview];
   //container view contains list of dataset . each of which is displayed 
   //  by it's own    respective tableview

   if(tableview = atableview){
      array = containerForAllview.getDatafortable(atableview);
      

    }else if(tableview = btableview){
     array = containerForAllview.getDatafortable(btableview);
    }
    /// like this for few more tables 

    // configure cells using this array
    cell.text = [array objectAtIndex:indexpath.row].name;
}

自分のデザインに何か怪しい気がします。

  1. View Controllerは、ビュー階層全体を認識する必要がありますか?最初は、ContainerViewがすべてを抽象化すると思っていました。
  2. (ユーザーイベントの処理はその責任です)テーブルビューの委任は、containerViewまたは私のビューコントローラーによって実装する必要があります。
  3. ビューがイベントを処理する場合、UIViewには、MVCアーキテクチャの概念に違反するデータモデルの参照が必要です。
  4. コンテナビューがテーブルビューをフィードするためにリストの配列を保持しているのは間違っていますか、それともそのロジックをビューコントローラに移動する必要がありますか?
4

2 に答える 2

1

ビューコントローラは、その下のビュー階層全体を管理する責任があります。ビューは、イベントがいつ発生し、誰に通知するかを知っている限り、イベントを管理するだけです。彼らは実際にそれについて何もすることはめったにありません。イベントデリゲート(多くの場合、所有しているView Controller)に通知するだけです。

一般に、viewController(コントローラー)のみがモデルと直接通信し、ビューに知っておくべきことを伝え、UIイベントに関するビューの通知に応答します。

具体的な対応:

  1. はい、ViewControllerは、管理する階層全体を把握する必要があることを認識しています。
  2. viewControllerは、ビューではなく、デリゲートメソッドを処理します。
  3. いいえ、彼らはイベントが発生したことをVCに伝えるだけです(委任を通じて、VCがどの状況でどのメソッドを呼び出すかを(さまざまなメカニズムを介して)ビューに伝えたことを除いて、VCについて何も知らないことによってではありません。
于 2012-07-13T22:45:04.920 に答える
1

MVCアーキテクチャに従うようにデザインを変更する簡単な方法は、テーブルごとに個別のデータクラスを作成することです。

TableAデータソースとデリゲートが呼び出される場所で何かを行うことができますTableAData-それは完全に別個のクラスです。TableAData次に、がプロトコルを宣言していることを確認する必要があります。これにより、TableAからデリゲートメソッドをリッスンしTableAData、それに応じて表示を変更できます。

MVCアーキテクチャは非常に単純です。別のクラスにデータ処理のすべての処理を任せてください。このクラスがデータを処理したら、View Controllerに通知して、ユーザーインターフェイスを更新できるようにします。これは、特にKey-Valueの監視など、デリゲートまたは通知を通じて行われます。

于 2012-07-13T22:49:44.497 に答える