我想知道我的選擇是交付模型創建和如何從ViewControllers訪問模型?假設應用程序不是微不足道的,並且需要在多個ViewController之間共享單個模型,那麼模型應該在哪裏創建以及ViewControllers應該如何訪問它?模型訪問和創建可可觸摸
有跡象表明,解決使用IOC /依賴注入或者最壞的型號定位這個問題無數的ActionScript框架,但似乎沒有在可可觸摸媲美。從衆多的代碼示例和項目環顧四周,似乎大多數人做下列之一:
聲明他們的模型在ApplicationDelegate以及通過訪問他們(使用它作爲一種註冊表至少手段模型本身並不必須是單身,但最終難以測試和嚴重架構。
其所有型號爲單身(壞出於顯而易見的原因)
通模式圍繞其ViewControllers之間這導致大量不必要的代碼和ca最終,一些ViewControllers將Model的引用傳遞給其他ViewControllers,而實際上並不需要自己訪問它們。
當然有更好的解決方案嗎?我覺得這個框架對於UIViews和ViewControllers之間的密切聯繫是如此的規範,但是沒有提供任何指導或解決方案來連接模型/服務層,這似乎很奇怪。我錯過了明顯的東西嗎?
CoreData,志願和通知我是很樂意與我有創作模型並將其與應用程序的其它部分通訊工具的詳細之間,但它是在創造和模型的訪問,這似乎打破下。使用AppDelegate作爲一種註冊表很方便,但這不是它的目的。並且有一個ViewController作爲模型的委託,顯然是錯誤的。感謝您抽出時間回覆。 – Undistraction
@ 1ndivisible:爲什麼要以這種方式使用視圖控制器作爲委託是「明顯錯誤的」? MVC設計模式中的控制器的作用是將消息從模型傳遞到視圖,反之亦然。爲控制器定義協議是將相關方法分組在一起的一種便捷方式,用於訪問模型數據。出於興趣,您是否閱讀了Apple的[可可設計模式](http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaDesignPatterns/CocoaDesignPatterns.html%23)reference(「The模型 - 視圖 - 控制器設計模式「)? – Stuart
感謝您的鏈接。這是一個偉大的文件。如果模型正在進行委託,則僅將View Controller用作委託是錯誤的。模型應該知道其他應用程序層沒有任何內容。 KVO和通知允許這種分離。引用鏈接文檔:'Model類不應該依賴於其他Model類以外的任何其他類。 – Undistraction