2

在MVC中,View不應該保存它的數據。但是我知道在Objective-c中你會這樣做:[textField setString:@"hello"];,該字符串然後被文本字段保留。這同樣適用於textField的字體和文本顏色等。設置簡單文本標籤的文本是否違背了MVC?

但是,UITableView使用數據源向控制器詢問其數據,然後由控制器重新加載表視圖。但它也存儲一些數據本身,如背景顏色。

我可以理解爲什麼UITextView不使用數據源的原因,如果每個屬性必須是方法,代碼將變得更加冗長。但是爲什麼在某些情況下使用數據源而不是其他的,爲什麼不設置一個UITableViewCells數組(我知道這意味着單元不能被重用,所以它會使用更多的內存,但是還有其他什麼設計原因),要顯示的UITableView?

當你創建你自己的對象時,你如何知道在一個視圖中什麼時候存儲少量的通用數據(例如,textview顯示的字符串只能是字符串,但任何字符串本身可以是任何東西)或使用數據源?

+0

'UITableViewDatasource'仍然在視圖元素中設置值,所以這裏沒有任何區別嗎?例如'cell.textLabel.text = @「我在這裏設置一個字符串?」;' – 2012-01-15 02:25:15

+0

@ Paul.s,我知道,我的意思是你不這樣做'[tableView setCells:[NSArray arrayWithObjects:cell1,cell2 ,...,nil];' – 2012-01-15 10:20:18

回答

0

我不熟悉objective-c的mvc框架,但我想我理解這個問題。

基本上,你不希望視圖對數據源後端做任何事情,也就是說,任何與訪問數據庫的工作無關。

但它可以訪問並使用數據本身。這是MVC的M部分。模型得到傳遞。該視圖知道如何顯示它。控制器知道如何對其執行業務邏輯(包括與後端系統(如數據訪問層)的交互)。

在數據網格的情況下,它必須打到後端才能獲取數據,所以它必須依賴控制器。

理想情況下,視圖只知道顯示相關信息(如背景顏色)。整個想法是關注的分離。你希望視圖只處理它的一部分,就像控制器一樣。然後你可以獨立修改它們。

至於數據源的細節(與數組相比),網格往往是複雜的。也許這是處理分頁或其他細節。在這種情況下,我不認爲它是如此多的層分離(因爲數組可能很容易成爲模型),但處理更多的功能。

我不確定你的意思是在視圖中「存儲」少量的數據。該觀點應該傾向於處理「觀點事物」。

+0

通過存儲少量的數據,我的意思是textview對它顯示的字符串有強烈的引用(即它擁有它的字符串)。當它需要使用數據源時,它不會請求字符串,就像tableview只需要數據源時需要的數據一樣。 – 2012-01-15 10:23:26

1

MVC是一種模式,不是詔書。讓視圖做這項工作。一些耦合正在發生。遵循該模式的指導原則,並將其轉化爲開發人員和組織的風格和願望。