0

我想知道我的選擇是交付模型創建和如何從ViewControllers訪問模型?假設應用程序不是微不足道的,並且需要在多個ViewController之間共享單個模型,那麼模型應該在哪裏創建以及ViewControllers應該如何訪問它?模型訪問和創建可可觸摸

有跡象表明,解決使用IOC /依賴注入或者最壞的型號定位這個問題無數的ActionScript框架,但似乎沒有在可可觸摸媲美。從衆多的代碼示例和項目環顧四周,似乎大多數人做下列之一:

  1. 聲明他們的模型在ApplicationDelegate以及通過訪問他們(使用它作爲一種註冊表至少手段模型本身並不必須是單身,但最終難以測試和嚴重架構。

  2. 其所有型號爲單身(壞出於顯而易見的原因)

  3. 通模式圍繞其ViewControllers之間這導致大量不必要的代碼和ca最終,一些ViewControllers將Model的引用傳遞給其他ViewControllers,而實際上並不需要自己訪問它們。

當然有更好的解決方案嗎?我覺得這個框架對於UIViews和ViewControllers之間的密切聯繫是如此的規範,但是沒有提供任何指導或解決方案來連接模型/服務層,這似乎很奇怪。我錯過了明顯的東西嗎?

回答

0

根據模型的大小,核心數據是丟失的「連接」。核心數據使得將模型綁定到視圖控制器並將數據穿梭到視圖非常容易。

如果你不希望使用核心數據,可能是沒有提供一種模型模板是因爲真的沒有什麼特別之處他們的原因 - 他們只是存儲數據。有一些類可用於幫助您存儲和處理數據(例如,請參閱NSCache),但除此之外,您的模型類可以簡單地爲具有一些公共屬性和/或自定義訪問器的NSObject子類。

使用的AppDelegate作爲一種中間人聽起來像是存取這樣的對象一個合理的方法,如果你的應用程序需要它,因爲你的AppDelegate是任何視圖控制器易於接近的。雖然,除非它對你的特定應用程序沒有意義,否則我會建議每個視圖控制器只訪問它需要的模型部分。如果需要,您始終可以將您的視圖控制器作爲特定類型的模型數據的代表,可以從「更遠的距離」進行訪問。

我希望幫助 - 對不起,如果我誤解的問題!

+0

CoreData,志願和通知我是很樂意與我有創作模型並將其與應用程序的其它部分通訊工具的詳細之間,但它是在創造和模型的訪問,這似乎打破下。使用AppDelegate作爲一種註冊表很方便,但這不是它的目的。並且有一個ViewController作爲模型的委託,顯然是錯誤的。感謝您抽出時間回覆。 – Undistraction

+0

@ 1ndivisible:爲什麼要以這種方式使用視圖控制器作爲委託是「明顯錯誤的」? MVC設計模式中的控制器的作用是將消息從模型傳遞到視圖,反之亦然。爲控制器定義協議是將相關方法分組在一起的一種便捷方式,用於訪問模型數據。出於興趣,您是否閱讀了Apple的[可可設計模式](http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaDesignPatterns/CocoaDesignPatterns.html%23)reference(「The模型 - 視圖 - 控制器設計模式「)? – Stuart

+0

感謝您的鏈接。這是一個偉大的文件。如果模型正在進行委託,則僅將View Controller用作委託是錯誤的。模型應該知道其他應用程序層沒有任何內容。 KVO和通知允許這種分離。引用鏈接文檔:'Model類不應該依賴於其他Model類以外的任何其他類。 – Undistraction