1

我知道这个问题有点笼统,但我想我的问题也很笼统。我在空闲时间开发了一个小型应用程序,我决定用 Cocoa 来做。很好,很多事情几乎是自动运行的,但有时很难理解框架是如何工作的。

最近我面临一个新问题。我想从一个类管理应用程序的所有窗口,基本上是一个前端控制器。我有一个主菜单和一个“导入数据”功能。当我单击它时,我想显示另一个包含表格的窗口并调用更新数据的方法。问题是这个方法在实现NSTableViewDataSource协议的类里面。

我怎样才能参考那个类?更重要的是,这应该是正确的方法吗?我是否应该扩展NSWindow该类以便我可以接收可以控制包含表的窗口的 NSWindow 实例(然后调用该方法)?

我可能会找到几种方法来克服这个问题,但我想知道哪一种是与可可一起使用的最佳实践。

PS:我知道有大量的文档文件,但我需要 2 条生命来做我想做的一切,所以我想我可以在这里寻求帮助:)

4

1 回答 1

2

问题是这个方法在实现 NSTableViewDataSource 协议的类里面。

我怎样才能参考那个类?

这两句话没有意义,但我想我明白你在说什么。

不要继承 NSWindow,而是将导入窗口的控制逻辑(包括 NSTableViewDataSource 方法)放入控制器类中。如果控制器对应一个窗口,你可以继承 NSWindowController,尽管你不必这样做。

您可以-importData:在应用程序委托中实现 IBAction,然后将菜单项的选择器连接到 importData: 在 First Responder 上。该方法应该实例化导入窗口控制器并从 nib 加载窗口。

在您的导入窗口控制器-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];
}
于 2012-12-02T06:08:16.440 回答