1

我不太确定基于文档的应用程序是如何工作的。我在 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) sender 操作中也有此代码,它执行相同但当然加载数据以定义应用程序工作区。

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

4

2 回答 2

1

当用户执行某项操作时,将调用 IBAction 方法。因此,在应用启动时不会从系统调用它。

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

查看您的操作方法,我看不出您为什么要自定义它。

您的文档类的一个实例是自动创建的。

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

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

于 2013-11-10T23:06:52.557 回答
0

不,我以为我很困惑,唯一的问题是发布观察者通知。当您调用 NSDocument 通知的关闭消息时,观察者仍然存在。在 ARC 工作我错过了这一点。所以这是我的问题的解决方案。还是非常感谢。

于 2013-11-12T18:23:13.997 回答