gpt4 book ai didi

objective-c - 基于文档的应用程序的 'New Document' 停靠菜单项将无法打开新文档

转载 作者:行者123 更新时间:2023-12-03 17:10:32 26 4
gpt4 key购买 nike

我的基于文档的应用程序有一个带有“新文档”项目的停靠菜单。停靠菜单是在 Interface Builder 中制作的,其项目的操作连接到“First Responder”的 -newDocument:

文档 Controller 是 NSDocumentController 的子类,称为 DocumentController

在应用程序委托(delegate)中,此代码用于防止在启动时打开无标题文档(而是显示文档 Controller 的打开面板):

- (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)sender {

[(DocumentController *)[NSDocumentController sharedDocumentController] openDocument:self];
return NO;

}

如果我现在启动我的应用程序,它将显示打开的面板而不是无标题的文档。如果我单击停靠菜单的“新文档”项,则不会打开新文档。如果我单击模板主菜单中的标准文件菜单选项“新建文档”,则会打开一个新文档。

我想不出为什么会这样,你能吗?如何使用停靠菜单来打开新文档?

<小时/>

编辑:Here is a sample project which has no NSDocumentController subclass but still has the same problem.

最佳答案

菜单项调用文档 Controller 上的 newDocument 方法。如果你点击 Dock,你会触发 NSApplication 的东西,它是委托(delegate)。例如。如果您有一个现有的应用程序窗口,那么您将不会在那里被调用。没有窗口会触发applicationShouldOpenUntitledFile

在您的文档 Controller 中重写如下:

- (id)openUntitledDocumentAndDisplay:(BOOL)displayDocument error:(NSError *__autoreleasing *)outError {
[self openDocument:nil]
}

如果您想在启动后显示 openPanel,则不要响应 appdelegate(应该 bla bla),而是这样做。如果您想在用户单击图标时触发它,请执行第二种方法

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
[(DocumentController *)[NSDocumentController sharedDocumentController] openDocument:nil];
}

- (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)sender {
return YES;
}

The action of the File menu's New item in a document-based application. The default implementation of this method invokes -openUntitledDocumentAndDisplay:error: and, if nil is returned, presents the error in an application-modal panel.

  • (IBAction)newDocument:(id)sender;

关于objective-c - 基于文档的应用程序的 'New Document' 停靠菜单项将无法打开新文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32166011/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com