我會在前言中說我對整個編程場景都很新穎。儘管如此,我在第一個OS X應用程序中取得了一些進展,這是一個簡單的「Paint」風格的應用程序。但是,在閱讀了基於文檔的編程指南之後,我剩下幾個問題。作爲NSResponders的可可MVC和NSViews
我目前的設置是,我通過變量「通過」我的自定義對象,以達到它的目的地。 例如我有我的自定義視圖,它創建一個自定義控制器並將指針傳遞給它自己。控制器然後創建一個數據模型,並將對視圖的引用傳遞給數據對象。但是如果一個更高級的對象需要這些數據,我需要有一個方法和通知系統來讓它回來。此外,隨着更多對象指向變量,變得更加難以確保變量中的數據處於正確的狀態。
我想創建一個更加水平的設置,但是我遇到了一個問題:如何將通過NSView的NSResponder方法收集的數據轉換爲擁有的數據對象(是正確的術語?)水平控制器?從我註釋的文檔SDK指南中的這張圖說明了我的問題與推薦的設置:
我知道我做了很多錯誤的事情,但我無法弄清楚如何做到這一點「正確的方法。有人能告訴我,我應該如何正確地將數據對象中的視圖封裝到數據對象中?
視圖層不應創建控制器。這是落後的。控制器應該創建視圖。如果視圖需要對控制器的引用,則控制器將該引用傳入。(例如,在控制器是目標的目標操作中隱式地使用該引用)。模型圖層不應該具有對視圖的引用層。 –
是的,我的新想法是擁有一個NSWindowController子類,用於管理所有視圖(因爲它們與窗口相關),還實例化自定義控制器對象,將引用傳遞給視圖,然後自定義控制器創建數據對象。然後,我將讓windowController將NSEvents從響應者鏈傳遞給自定義控制器,然後自定義控制器將在數據對象和視圖之間進行通信。希望那是不正確的? – PopKernel
沒關係。對於不是窗口或視圖控制器的自定義控制器來說,接收「NSEvent」是有點不尋常的。通常,窗口,視圖或它們各自的控制器將事件解釋爲更高層次的抽象,如調用操作方法,通知或委託方法。 –