1

這是this問題的複製品。可可教程故障

我在抓取一些可可功能(特別是控制器和代表)方面遇到困難,所以我決定完成一個基本的教程。我找到了「你的第一臺Mac應用程序」,並且一直運行良好,直到「Where To Next」階段。這裏有一堆大概基本的東西,我不知道這件事:

>

  • 「創建一個新的控制器類和移動從應用程序委託管理跟蹤和用戶界面到這個新班級。「

...什麼是創建一個單獨的控制器類的地步?我得到了MVC模式,並在過去使用它,我只是無法弄清楚單獨的Controller和Delegate的地方。

  • 「創建筆尖文件中的控制器類的實例,並作出適當的連接,並從它,而不是從應用程序的委託。」

...在此之前這一點上我只是想,我只是創建NSWindowController的一個子類,然後在文件的.xib該窗口應該是這個類的對象申報。現在我很困惑。控制器應該是什麼類?應該遵循什麼接口(對不起,協議)?如果這只是我指出的一類,那麼再一次 - 與我已經有的代表有什麼不同?

  • 「添加從應用程序委託給新的控制器對象。當應用程序已完成啓動,則應用程序委託應該將消息發送到所述控制器,以顯示窗口的連接」。

...什麼信息?我發現的最接近的是的ShowWindow:消息NSWindowController類,但是當我寫這篇文章:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { 

    [trackController showWindow:self]; 

} 
在AppDelegate中的的applicationDidFinishLaunching方法

,它顯示例如消息錯誤「接收器類型‘TrackController’是一個向前聲明」,我只是不明白這是什麼意思

更重要的是,爲什麼我應該發送消息來顯示這個窗口,如果這個窗口顯示沒有任何代碼,我創建所有,在一個空白的項目?也許我應該以某種方式關閉此默認行爲並自己創建此窗口的實例?

回答

1

控制器類的要點:在控制器和模型元素及其用戶界面之間保持一定的比例是一種很好的做法。對於簡單的應用程序,您可以將所有代碼放在AppDelegate中。一旦開發出更復雜的應用程序,您將需要將代碼從AppDelegate卸載到各種控制器,並且您將擁有各種視圖來維護您的模型。我試圖在視圖和控制器之間保持1:1的關係,以使事務易於管理。

控制器可以實現各種協議來代表UI組件處理特定的功能位。然後他們成爲該組件的代表。例如,在您的視圖中,您有一個NSTextView,並且您想知道用戶何時單擊文本中的鏈接。然後您的控制器可以執行<NSTextViewDelegate>並執行方法textView:clickedOnLink:atIndex:。通過這樣做,它成爲您的NSTextView的代表。

控制器應該是什麼類?有大量的控制器類可用於構建您的應用程序。我傾向於只使用NSViewController。該控制器能夠處理顯示在NSWindow中的NSView的實例。 NSView支持的視圖層次允許您決定各種粒度情況(巨大的,複雜的控制器或細粒度 - 這取決於您)。

對於前向聲明問題,請參閱this post

我不明白你最後一個問題重新顯示窗口。顯然,默認模板會生成一些管道代碼來顯示窗口。您可以使用該代碼或推出自己的代碼。澄清,如果我不正確地理解你...