我正在研究一個iPhone應用程序,並試圖儘可能符合MVC(我仍在學習)。我的數據模型中有一個無符號整數,表示秒數。我希望它以'00:00'(分鐘:秒)格式顯示在視圖中。我的問題是,這種格式應該在哪裏發生? 模型對象的責任是能夠以這種格式提供它嗎? 控制器是否在從模型中將其傳遞給視圖之前對其進行格式化? 或者視圖處理格式?MVC與Objective-C。格式化視圖的數據在哪裏發生?
謝謝你的幫助。
我正在研究一個iPhone應用程序,並試圖儘可能符合MVC(我仍在學習)。我的數據模型中有一個無符號整數,表示秒數。我希望它以'00:00'(分鐘:秒)格式顯示在視圖中。我的問題是,這種格式應該在哪裏發生? 模型對象的責任是能夠以這種格式提供它嗎? 控制器是否在從模型中將其傳遞給視圖之前對其進行格式化? 或者視圖處理格式?MVC與Objective-C。格式化視圖的數據在哪裏發生?
謝謝你的幫助。
如果這種格式只在一個地方使用,最好的解決方案是將格式化放入視圖中,而且這種方法通常效果很好。但是,如果您沒有自定義視圖,那麼將此工作放入視圖控制器是很自然的。在Cocoa的MVC版本中,視圖控制器在管理視圖方面具有廣泛的靈活性。 (這是Cocoa的MVC與SmallTalk的MVC不同的重要地方。)
但是如果你想在視圖(或視圖控制器)之間共享相同的格式呢?然後,將格式代碼分解成NSFormatter
子類(或者在您的案例中使用現有的NSDateFormatter
)。你可以傳遞這些信息,然後放入ivars中,甚至創建一個Singleton來保存它們。
爲什麼不把它放在模型中呢?好吧,假設您有四個視圖以這種方式顯示時間,但您隨後添加了兩個其他視圖,將時間顯示爲00:00.0,然後有一個累加器視圖顯示小時和分鐘。現在你必須不斷擴展模型來處理這些情況。該模型正在獲取關於視圖的越來越多的信息。在格式化程序中保持格式可讓您共享代碼(和錯誤修復),而不會污染具有這些細節的模型。而具有非常特殊格式需求的視圖仍然可以擁有自己的自定義代碼。
沒有必要爲每種格式創建單獨的NSFormatter
子類。您可以創建一個類似「小時」,「分鐘」,「秒」等選項的類MYObjectFormatter
。在這方面,它的工作方式就像NSDateFormatter
一樣,並且在保留格式代碼的同時還可以簡化您的使用。脫離模型。這正是如何對NSDate
和NSDateFormatter
進行分區。
你很可能會遇到一系列的意見。基本上,因爲它純粹是表現性的,所以我把它放在View層;沒有控制邏輯,這完全是格式化一些現有數據以供顯示的問題。
+1完全同意。這顯然是查看功能。 – JeremyP 2012-03-27 14:18:29
使用NSFormatter子類相對於iOS中的自定義格式化程序類(例如,與NSCells不同,不使用NSFormatter的UITableViewCells在哪裏)有什麼優勢? – Cris 2012-03-28 00:33:36
(我問,因爲在它的表面,NSFormatter不提供任何接口以外的子類)。 – Cris 2012-03-28 00:57:52
NSFormatter的主要優勢在Mac上。我沒有意識到iOS中有任何Mac提供的特殊NSFormatter支持。這就是說,沒有理由使用標準接口。它運行良好並與其他格式化程序自然交換,使其更好地重用。 – 2012-03-28 23:30:19