2011-09-11 85 views
1

我正在寫一個簡單的iOS應用程序,它使用表視圖來顯示來自一組模型對象(每個是「NTTrip」的一個實例)的信息。我決定使用UITableViewController的一個子類來管理視圖和模型對象集合,還是我應該將管理模型對象的邏輯分成一個新的對象,該對象將充當表視圖的數據源即將邏輯分成「視圖控制器」和「模型控制器」)。這是一個好主意,還是我會增加額外的複雜性到一個不一定需要它的系統?使用UIViewController與單獨的數據源對象來管理模型對象?

回答

1

一般來說,我喜歡將特定的職責(如UITableView的數據源)分解到非UIViewController控制器中。我認爲這種分離使測試和維護我的控制器變得更容易。

然而,這並不總是有道理。如果你正在考慮使用UITableViewController,那麼這意味着你期望你的表視圖填充屏幕,這裏可能並不是你的UIViewController子類負責的其他行爲。如果對每個控制器沒有明確的獨立責任,我認爲多個控制器會不必要的複雜。

一種替代方案可能是具有一個UIViewController子類,它充當表視圖的委託和數據源。該控制器可以呼叫某個NTTripService控制器,該控制器可以負責加載並保留您的NTTrip對象,並使它們可供多個UIViewController子類顯示。

+0

太好了,謝謝!你最後的想法完全符合我的想法。我意識到我需要至少有幾個不同的視圖控制器來訪問數據,所以創建服務控制器可能是有意義的。 – Sean

1

控制器通常是應用程序中最複雜的部分,需要與數據交談並管理視圖。在iOS中,您通常沒有數據控制器。因此,您的表格視圖控制器還應該與您的模型進行通信,以便爲您的表格視圖顯示正確的數據。通過讓另一個數據控制器與數據模型交談並充當數據源,您的原始控制器還可以做什麼?當然,另一個極端是將每一點工作都包含在一個單獨的控制器中......但是你會發現這個問題。底線 - 你的單表視圖控制器應該管理你的數據和你的表視圖 - 這就是控制器的意圖。

儘管如此 - 如果您的相同數據由其他控制器進行管理(編輯,使用),您可能希望按照Jonah的建議將其納入服務中。否則,這只是不必要的工作和複雜。