在基于文档的Cocoa应用程序中实现导出功能的可接受方式是什么?

时间:2009-04-20 22:34:05

标签: cocoa design-patterns events document

我有一个简单的基于文档的Cocoa应用程序,可以充当.wav文件的查看器,进行一些频率分析。我希望能够将从已打开文件中收集的数据导出到CSV,以便在其他程序中进行进一步分析。

Cocoa中基于文档的应用程序框架允许您覆盖

- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError

实现默认的Save / Save As ...工作流程,但我不想写我打开的文件。

显而易见的事情是在我的文档中实现导出工作流,提供文件保存表,构建一些NSData,并将其写入文件路径,但是没有明显的方法来连接MainMenu中的插座nib对文档控制器的操作。

那么,在基于文档的Cocoa应用程序中实现此类功能的可接受方式是什么?

1 个答案:

答案 0 :(得分:3)

您可以在MainMenu.nib的“First Responder”对象中创建一个名为“export:”的新操作,然后连接到该对象。然后,在文档子类中实现export:方法。这将调用您的方法。

这样做的原因是发送给魔术第一响应者对象的消息遍历整个响应者链,寻找处理它们的一些对象。响应者链中的一个项目是文档,因此当当前选择的控件,视图,超视图,窗口等都不处理消息时,文档有机会。 (文档控制器也在该链上,因此您也可以使用它。)

看看Apple's responder chain docs - 图1.10涵盖了这条特定的路径。