2011-07-06 3 views
4

私は最近、MVCについて多くのことを読んできました。私はその周りに頭があると思いますが、私の問題に最も近づける方法についていくつかのアドバイスと情報をいただきました。iPhone MVCテーブルビューの質問とカスタムクラスモデルの構築

MVCデザインパターンに関連する3つの質問があります。私は人々が(Student.h /メートルと言う)カスタムクラスのオブジェクトの配列を移入するcontoller(表ビューの発言を)使用しているが発生している例の多くでは

  1. 。 しかし、Studentクラスには、コントローラの変数のデータ配列を返すメソッドが呼び出されるべきではありませんか?それはMVCの仕組みですか?モデルがデータの定義を保持し、それを読み書きする責任を負うことはありますか?

  2. 多くのテーブルビューの例では、私が読んだ様々な本の中で、「便宜のためにコントローラを代理人にしてテーブルのデータソースにするつもりです。私は、テーブルビューがコントローラをデータソースとして使用しない例をまだ見ていません。どのようにしてテーブルビューを別のデータソースに接続しますか?

  3. 私は2つのモデルクラス "mission"と "airfield"を持っています。これらのそれぞれには、クラウド内のXMLファイルからのデータが必要です。ミッション/飛行場の実装ファイルにパーサを書き込んでいますか?別のParserオブジェクトを作成しますか?これらのモデルはアレイとしてコントローラにデータを戻す必要がありますか?

私は多くの理論を理解していますが、私がウェブ上で見つけた多くの例は、私が理解すると思った多くの概念を破っているようです。

どのような説明も大歓迎です。このサイトの回答の質は素晴らしいです。 ありがとうございます。

答えて

3

MVCの仕組みをよく理解しているようですので、少しコメントを追加します。

  1. コントローラはビ​​ューにデータを供給します。 どのようなデータをどのように使用し、どのように影響するかについては、100万の異なる州やシナリオが存在する可能性があり、それを把握するのはモデルの仕事ではありません。モデルはデータを保持し、コントローラはロジックを処理します。

  2. テーブルビューに別のデリゲートまたはデータソースが必要な場合は、テーブルビューコントローラでそれらをインスタンス化し、delegateおよびdataSourceプロパティを使用してそれらについてテーブルビューに伝えることができます。彼らは、UITableViewDelegateUITableViewDataSourceプロトコルの必要なメソッドを実装する必要があります。

  3. モデルとコントローラが重複して機能する場合がありますが、これはそのような場合の完全な例です。

    一つの解決策は、missionairfieldクラスは、必要なXMLをダウンロードして、パーサを設定する方法を知っているカスタムクラスから継承させることができ、ので、彼らは単にURLを提供し、彼らの特定のためのパーサーのコールバックをオーバーライドする必要がありますタグ。 XMLのダウンロードに関連するすべてのものは、スーパークラスで扱うことができます。

    URLを受け取り、XMLを返す別のクラスを作成し、次にmissionairfieldクラスがそのメソッドを呼び出し、XMLを個別に解析する別の方法があります。

    missionクラスとairfieldクラスの両方でコードをダウンロードして解析する方法を間違えているのは、コードを両方の場所で維持する必要があるためです。

    コントローラコントローラのコードを非常に限定的(保守可能)にすることができるように、データをコントローラに渡すことは問題ありません。

+0

ありがとうmortenfast。非常に役立ちます! – MonkeyBusiness

+0

+1良い説明。 3について:ミッションと飛行場の作成は、ファクトリメソッドパターンhttp://en.wikipedia.org/wiki/Factory_method_patternで行うことができます – Kay