2010-12-08 9 views
2

MVCに関しては、私のコントローラでインスタンス化されたUITableViewと、UITableViewDelegate & UITableViewDataSourceとして動作するモデルオブジェクトがあります。私は、デリゲートとデータソースを設定するに来たとき、私はちょうどモデルを指すように両方を追加しました:DataSourceが右に感じるモデルにフィットするMVCにUITableViewDelegateとDataSourceを配置する場所は?

// INSIDE CONTROLLER 
[tableView setDelegate:dataModel]; 
[tableView setDataSource:dataModel]; 

を。しかし、デリゲートは、モデル(DataSourceのようにそのモデルに最適)ですか、それとも(MVCの言葉では)コントローラにうまく収まるでしょうか?

// INSIDE CONTROLLER 
[tableView setDelegate:self]; 
[tableView setDataSource:dataModel]; 

EDIT:私は私のモデルオブジェクトは、私が(それゆえ私は、モデルにデータソースを設定する)のUITableViewで表示したいデータを保持しているNSMutableArrayのが含まれていることを明確にすべきです。これは、モデルから直接UITableViewを読み込むことができるのでうまくいくようです。

答えて

3

通常の練習は、それがUITableViewDelegateとUITableViewDataSourceに準拠したか、それは(それらのプロトコル自体に準拠して、あなたが注意します、)のUITableViewControllerのサブクラスである、あなたのビューコントローラデリゲートとデータソースを作ることです。もちろん、コントローラに実際のデータを提供するコードは、モデルレイヤーに残る必要があります。

あなたのモデルクラスは、テーブルのView Controllerから簡単にアクセスできるプロパティとしてNSMutableArrayを公開する可能性があります。

+0

GreiffeyDogさん、まさに私が後にしてくれたことを高く評価しました。私は、「Delegate」と「DataSource」の両方をコントローラに移します。また、編集に関しては、私は既に配列の@property設定と私のコントローラのモデル設定へのポインタを持っていたので、絶対にコントローラから配列にアクセスする必要があります。ありがとうございました。 – fuzzygoat

1

UITableViewDelegateはよりGUI指向のもので、テーブルビューを含むビューコントローラがビューデリゲートとして最適です。データソースはGUIには関係ありませんが、通常はすべてのリンゴリンゴの試料の場合には、それは同様(テーブルビューコントローラからまたはIBに)見えますので、例彼らは、両方のようにテーブルビューが含まれているコントローラを、バインド: YourTableViewController.m

[self.tableView setDelegate:self]; 
[self.tableView setDataSource:self]; 
3

AppleのUITableViewDelegateドキュメントがいるようですビューレイアウトなどを支援する観点から、テーブルビューデリゲートを記述する。残念ながら、デリゲートが動的行の高さを返す場合(データソースがセルを返す場合でも)、デリゲートがセクションのヘッダーとフッターのビューを返すなど、実際には両者の間に少しの結びつきがあります(データソースは普通のタイトルを返す)。

このような問題は、テーブルビュー(reloadDataを呼び出すために必要)をデータソースとデリゲートのデータソースから完全に分離することを難しくします。可能な限り、同じオブジェクトがデータソースデリゲートとして機能する場合、実際には最も簡単です。可能であれば、デリゲートは通常、テーブルビューのプレゼンテーションを管理するView Controllerとして最も理にかなっています。

関連する問題