2012-03-01 32 views
2

模型視圖控制器策略表示視圖不能擁有數據,應該使用委託來從ViewController請求數據。iOS上的協議,委託和數據源

但是對於exapmle UILabel呢?控制器會直接與Outlet對話,例如:

self.textfield.text = @「顯示此文字」。 (這裏沒有代表?UILabel也是一種視圖嗎?)

+0

可能的重複[爲什麼UIImageView自己的UIImage。它違反了MVC的原則嗎?](http://stackoverflow.com/questions/9215891/why-does-uiimageview-own-uiimage-does-it-violate-mvc-principles) – Caleb 2012-03-01 20:09:45

回答

2

對於像在UILabel中設置文本那樣簡單的事情,委派會不必要的複雜化。

用UILabel打破MVC的一個例子是使用它的文本屬性作爲應用程序中其他地方使用的唯一數據存儲。例如,如果應用程序涉及用UILabels顯示的人員姓名和其他信息,那麼很可能您應該將Person類作爲模型的一部分,而不是將UILabels用作該信息的專用存儲。

+1

但重要的一點是,它是對於有一份數據副本或引用數據的觀點來說很好,但是該觀點不應該關心數據來自哪裏,它的含義等等。UILabel是非常可重用的,因爲它不擔心這些事情;你給它一個字符串,它會顯示該字符串,直到有人告訴它顯示一個不同的字符串。 – Caleb 2012-03-01 20:34:28

+0

@Caleb那麼,爲什麼UIPickerView使用一個數據源來處理組件數量呢?當然,組件的數量可以是一份數據的副本或引用,而不關心來自哪裏。 – Ant 2012-10-23 15:57:04

+0

@Ant我會說使用數據源的重點在於使得選擇器不關心數據來自何處。您給選取器一個數據源 - *任何*數據源 - 並且知道如何向該對象請求要顯示的項目。將數據源用於選取器而不是標籤的決定只是設計問題 - 您是否真的想爲每個標籤設置數據源? OTOH,您是否希望每次單個項目更改時都必須將大量數據發送到您的選取器中?他們是這樣的,因爲它有意義w.r.t.他們如何使用。 – Caleb 2012-10-23 16:38:36

0

它基本上意味着UILabel不應該修改提供要顯示的文本的基礎數據。控制器也一樣,它只能作爲從數據到視圖的橋樑。