我知道这个问题有点泛,但我想我的问题也是通用的。 我正在空闲时间开发一个小应用程序,我决定使用Cocoa。这很好,很多东西几乎都是自动化的,但有时很难理解框架是如何工作的。
最近我遇到了一个新问题。我想从一个类,一个前端控制器基本上管理应用程序的所有窗口。我有一个主菜单和一个“导入数据”功能。当我点击它时,我想显示另一个包含表格的窗口,并调用更新数据的方法。问题是此方法位于实现NSTableViewDataSource
协议的类中。
我如何引用该课程?更重要的是,哪个应该是正确的方法呢?我应该扩展NSWindow
类,以便我可以接收一个可以控制包含该表的窗口的NSWindow实例(然后调用该方法)?
我可能会找到几种方法来克服这个问题,但我想知道哪一种是与可可一起使用的最佳做法。
PS:我知道有大量的文档文件,但我需要2条生命来做我想做的一切,所以我想我可以在这里问一些帮助:)答案 0 :(得分:2)
问题是这个方法在实现NSTableViewDataSource协议的类中。
我如何引用该类?
这两句话没有意义,但我想我明白你的意思。
不是将NSWindow子类化,而是将导入窗口的控制逻辑(包括NSTableViewDataSource方法)放入控制器类中。如果控制器对应于一个窗口,你可以继承NSWindowController,尽管你没有。
您可以在应用程序委托中将-importData:
实现为IBAction,然后在First Responder上将菜单项的选择器连接到importData :.该方法应该实例化导入窗口控制器并从笔尖加载窗口。
在导入窗口控制器的-awakeFromNib
或-windowDidLoad
方法中,调用更新数据的方法。
<强>加了:强>
以下是我建议您在应用代理中使用的模式:
@property (retain) ImportWindowController *importWC;
- (IBAction) showImportWindow:(id) sender {
if (!self.importWC)
self.importWC =
[[ImportWindowController alloc] initWithWindowNibName:@"ImportWindow"];
[self.importWC refreshData];
[self.importWC.window makeKeyAndOrderFront:sender];
}