为基于文档的应用程序的NSDocument定义控制器

时间:2013-11-10 19:36:08

标签: objective-c workflow document nsdocument

我不太确定基于文档的应用程序是如何工作的。 我在Mainmenu.xib中为NSObject创建了一些动作。当用户点击“文件>新”时调用其中一个:

-(IBAction) newDocument:(id)sender{
    Document* newDoc =[[Document alloc] init];
    [[NSDocumentController sharedDocumentController]addDocument:newDoc];
    [newDoc addWindowController: [[NSWindowController alloc] initWithWindowNibName:[newDoc windowNibName] owner:newDoc]];
    [newDoc showWindows];
}

我在openDocument:(id)发送者操作中也有这个代码,它执行相同的操作但当然加载数据以定义应用程序工作区。

如果我运行应用程序,它会显示一个空白文档,而不会调用newDocument操作。我不知道如何停止默认空白文档并设置newDocument:被调用。 然后,如果我做openDocument:也是(所以我有两个文件,一个空白,一个没有),我在第二个文件上做了一些操作,它也在第一个空白文件中复制。 我仔细检查代表,文件所有者,以及 - (void)windowDidBecomeMain:(NSNotification *)通知是否返回不同的指针,所有似乎都没问题。 可能我不理解基于文档的应用程序工作流程,但我已阅读Apple指南和其他说明。我错过了什么?

2 个答案:

答案 0 :(得分:1)

当用户做某事时,会调用IBAction方法。所以这不是在应用程序启动时从系统调用的。

您可以使用-applicationShouldOpenUntitledFile:NSApplicationDelegate)自定义应用启动时的行为,这可能是您的下一个问题 - -applicationShouldHandleReopen:hasVisibleWindows:NSApplicationDelegate)。不建议在两种情况下更改行为。

查看您的操作方法,我认为没有理由,为什么要自定义它。

自动创建文档类的实例。

您可以在文档子类中为它创建一个窗口控制器。这是记录在案的。

NSDocumentController为您完成工作。默认行为有什么问题?

答案 1 :(得分:0)

没有。我认为是困惑而不是唯一的问题是关于发布观察者通知。当您为NSDocument通知调用close消息时,观察者仍然会持续存在。在ARC工作我很想念这一点。 所以这是我的问题的解决方案。无论如何,谢谢你。