这是这个问题的副本。
我在掌握一些 Cocoa 基础知识(特别是 Controllers 和 Delegates)时遇到了困难,所以我决定完成一个基础教程。我找到了一个“你的第一个 Mac 应用程序”,一切顺利,直到“下一步要去哪里”阶段。这里有一堆我不明白的大概是基本的东西:
>
- “创建一个新的控制器类,并将管理轨道和用户界面从应用程序委托转移到这个新类。”
...创建一个单独的控制器类有什么意义?我得到了 MVC 模式并在过去使用过它,我只是无法弄清楚单独的 Controller 和 Delegate 的位置。
- “在 nib 文件中创建控制器类的实例,并与它建立适当的连接,而不是与应用程序委托建立适当的连接。”
...在此之前,我只是认为我只是创建了一个 NSWindowController 的子类,然后在 .xib 文件中声明该窗口应该是该类的对象。现在我很困惑。控制器应该是什么类?它应该符合哪些接口(对不起,协议)?如果它只是我指向 outlet 的一个类,那么再一次 - 与我已经拥有的 Delegate 有什么区别?
- “添加从应用程序委托到新控制器对象的连接。应用程序完成启动后,应用程序委托应向控制器发送消息以显示窗口。”
...消息是什么?我找到的最接近的东西是 NSWindowController 类中的 showWindow: message ,但是当我写这个时:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
[trackController showWindow:self];
}
在 AppDelegate 的 applicationDidFinishLaunching 方法中,它显示错误“接收器类型'TrackController'例如消息是前向声明',我只是不明白这是什么意思。
不仅如此——我为什么要发送一条消息来显示这个窗口,如果这个窗口没有任何我创建的代码,在一个空白项目中显示?也许我应该以某种方式关闭这个默认行为并自己创建这个窗口的一个实例?