2012-08-12 23 views
2

有一段時間我一直在看客觀的c例子,看斯坦福大學的演講,玩弄一些代碼來獲得創建iOS應用程序的懸念。iOS架構和組件

不過也有,我不能找到一個很好的答案几件事情:

  1. 如何正確分開我的幾層?我瞭解MVC結構,並且看到了一些爲模型實現業務邏輯創建類別的示例。這是正確的方式,通過豐富模型或創建專用類(例如驗證用戶,從json提取模型,組訂單)?

  2. 觀點應該有多聰明?我可以製作一個顯示聯繫人(通過分配聯繫人屬性)的視圖,還是應該爲所有聯繫人字段創建單獨的屬性,還是應該通過委託調用請求視圖的信息?

  3. 我在我的應用程序中使用了故事板。在我的屏幕上,我想 有一個導航欄,讓我們說一個顯示訂單的視圖。在 其他屏幕我想重用訂單視圖。

    • 如何在其他ViewController中重新使用訂單視圖的ViewController和View?
    • 如果我有4個屏幕具有相同的外觀,我是否必須將它們複製到故事板中?這似乎是一個主要的痛苦,如果我想改變我的背景?或者添加一個按鈕到所有的視圖?當我創建一個設置嚮導時,我不想爲每個屏幕單獨定義外觀。

從C#的背景,我可能必須進入Objective-C的心態:)
任何幫助,在此將是巨大的到來。

回答

5

1)ObjC-Categories很容易扭曲你對你所面臨的主要問題的理解。 ObjC分類是完全不必要的。您始終可以通過子類化,對象組合,實際模型中的其他方法或控制器或視圖中的某些定製來處理這些擴展。因此,如果您需要格式化數據(例如模型中存在的數據)以便在視圖中顯示,那麼該任務通常會落入控制器中。就您提供的示例而言:您可以在簡單情況下選擇模型 - 如果複雜程度足夠,或者它會阻止您執行冗餘,則任何示例都可能需要專用類。請注意,這些可能是輔助類,它們只是產生一個模型,或者它們可能是抽象類的多個具體組合。並非所有的東西都必須正確地落在M或V或C的定義中。您可以隨意使用ObjC的許多設計模式。將MVC視爲Cocoa通常使用的模式 - 您需要了解它們,並且您需要知道如何對這些類型進行子類化和擴展,但隨着實現從Cocoa的庫中移除(例如隨着複雜性的增加),這些模式將失去支配地位, 。

2)它們可以很聰明。但是,在MVC下,您希望將其實現集中在視圖/表示方面。代表信息集合的視圖實際上可以執行通常爲控制器保留的一些任務 - 但是,您通常會放棄執行是專用的MONContactView。如果你走這條路線,你通常會這麼做,以便輕鬆重用或實現簡單的界面。顯示關於Contact的信息可能非常複雜 - 在簡單情況下,這些任務通常由控制器處理。具體而言,MONAwesomeContactView可能不像MONAwesomeContactViewController那樣複雜(例如在SLOC中)(除非您有一些非常特殊的繪圖或佈局來執行)。設置控制器的聯繫人會更常見,並讓控制器將聯繫人數據推送到視圖的字段。同樣,在一個非常特殊的子類中 - 在某些情況下,一個視圖可以很好地保存自己的控制器。

3a)創建一個類的多個實例沒有任何問題。

3b)無需複製。當聞到重複時,我會將實現推向實際代碼 - 程序可以應用您所期望的外觀和感覺,或者根據需要添加或操作子視圖。當然,它們不會出現在Xcode的NIB編輯器中。當然有其他方法,但是這種複製常常使我將實現移到編譯代碼。實現兩者的良好平衡並不困難(個人而言,我以編程方式完成大部分視圖,而不是使用NIB)。

+1

很高興看到這裏還有其他人不會被IB欺騙。我也是,我以編程方式創建視圖 - 那些XIB/NIB/WTF文件真的很吸引人。它們增加了不必要的複雜性並降低了靈活性(特別是如果我想添加一些活力)。 – 2012-08-12 06:26:18

+1

@ H2CO3 up top! :)我有時會發現XIB對原型很有用,偶爾的觀點不需要真正的專業化......但是在寫入/維護實際程序的時候卻很麻煩。更多關於我的操作/例如:http://stackoverflow.com/questions/1816964/designing-the-iphone-interface-in-a-nib-or-in-code/1817964#1817964巧合(?),我'今天花了很多時間清理由另一位工程師創建的XIB - 並且在他們中間存在相當大的問題和冗餘= = ...但是我知道什麼?我主要是一個低級別的人 - 哈哈。 – justin 2012-08-12 07:10:39

+1

別說什麼! :D我被那些堅持自己的想法的人嚇壞了,C是'一種醜陋的低級語言......' – 2012-08-12 07:33:24

1
  1. 這是一個很抽象的問題,它不清楚'層'是什麼意思。是的,您應該在適當的地方創建自己的類,但類別還可以讓您選擇爲現有類添加功能。如果你可以對問題更具體,那麼提供更好的答案會更容易。

  2. 這是一個判斷呼叫。如果你想創建一個視圖類,知道如何顯示你的聯繫人類型的實例,這在我的書中沒有問題。如果該視圖知道聯繫人存儲在應用程序中的位置,那就不太好了。

  3. 請記住,故事板中的內容是對象,而不是類。您不想嘗試在另一個場景中重複使用一個場景中的視圖 - 這意味着在場景之間共享視圖,這實際上不起作用。如果你想在幾個地方使用同一個訂單視圖,那麼這將是創建一個班級的好選擇。另一方面,你可以設置你的故事板,以便幾個不同的場景都轉換到相同的場景。例如,如果您希望應用的不同部分以模態方式顯示顯示訂單的場景,則可以這樣做。

+0

有了層,我的意思是:應用層(如經典的UI /商業/數據)。類別似乎是擴展核心數據實體的好方法。 – Zyphrax 2012-08-15 06:02:11