2012-03-01 10 views
2

モデルビューコントローラのポリシーでは、ビューはデータを所有することはできず、デリゲートを使用してViewControllerからのデータを要求する必要があります。iOS上のプロトコル、デリゲート、データソース

exapmle UILabelはどうですか?コントローラは、アウトレットに直接話します。例えば、

self.textfield.text = @ "このテキストを表示する"。 (ここにデリゲートはありませんか?UILabelも一種のビューですか?)

+0

[なぜUIImageViewはUIImageを所有していますか?それはMVCの原則に違反していますか?](http://stackoverflow.com/questions/9215891/why-does-uiimageview-own-uiimage-does-it-violate-mvc-principles) – Caleb

答えて

2

UILabelでテキストを設定するなどの単純な作業では、委任が不必要に複雑になります。

UILabelでMVCを破る例は、アプリケーションのどこかで使用されているデータの唯一のストレージとしてtextプロパティを使用しています。たとえば、UILabelsで表示されるユーザーの名前やその他の情報がアプリに含まれている場合、モデルの一部としてPersonクラスを用意し、UILabelsをその情報の専用ストレージとして使用しないでください。

+1

重要なポイントは、ビューのためにデータのコピーや参照を持つことは問題ありませんが、ビューはデータの出所、その意味などを気にするべきではありません。UILabelは、それらのことを心配しないので、 ;あなたはそれに文字列を与え、誰かが別の文字列を表示するように指示するまでその文字列を表示します。 – Caleb

+0

@Caleb UIPickerViewはなぜコンポーネントの数にデータソースを使用しますか?確かに、コンポーネントの数は、データのコピーまたは参照であり、どこから来たのか気にすることはできません。 – Ant

+0

@Ant私は、データソースの使用の全ポイントは、ピッカーがデータがどこから来るのか気にしないということです。ピッカーにデータソース(*任意の*データソース)を与え、そのオブジェクトにアイテムを表示する方法を知っています。ピッカーにはデータソースを使用するが、ラベルには使用しないという決定は設計上の問題です。すべてのラベルにデータソースを設定する必要が本当にありますか? OTOH、1つのアイテムが変更されるたびに、あなたのピッカーに多数のデータを配信する必要がありますか?彼らはそれが理にかなっているからです。彼らはどのように使用されています。 – Caleb

0

基本的には、UILabelは、表示するテキストを供給する基になるデータを変更してはならないことを意味します。コントローラーも同様です。コントローラーは、データからビューまでのブリッジとしてのみ機能する必要があります。

関連する問題