首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >禁用基于Cocoa文档的App中的Open

禁用基于Cocoa文档的App中的Open
EN

Stack Overflow用户
提问于 2015-06-18 11:46:18
回答 2查看 596关注 0票数 2

我已经编写了一个基于文档的应用程序,它在应用程序启动时禁用了新文档的自动创建,而没有恢复以前打开的文档。

现在,我还想禁用在应用程序启动时出现的打开面板。

开放面板有时是在我的应用程序委托的applicationWillFinishLaunching:applicationDidFinishLaunching:之间启动的。

我想知道如何禁用这个功能的唯一方法是在子类中覆盖[NSDocumentController openDocument:],然后创建一个次要的‘助手’方法,然后连接到File>Open菜单。这似乎是一个非常棘手的解决方案,并想看看是否有人有更好的想法。

代码语言:javascript
复制
1   Core Animator                       0x0000000100042121 -[NSDocumentController openDocument:] + 49
2   AppKit                              0x00007fff8772ffe6 -[NSDocumentController(NSInternal) _showOpenPanel] + 63
3   AppKit                              0x00007fff87244184 -[NSApplication _doOpenUntitled] + 290
4   AppKit                              0x00007fff87243c91 __58-[NSApplication(NSAppleEventHandling) _handleAEOpenEvent:]_block_invoke + 252
5   AppKit                              0x00007fff87243a59 __97-[NSDocumentController(NSInternal) _autoreopenDocumentsIgnoringExpendable:withCompletionHandler:]_block_invoke_3 + 140
6   AppKit                              0x00007fff872435a1 -[NSDocumentController(NSInternal) _autoreopenDocumentsIgnoringExpendable:withCompletionHandler:] + 798
7   AppKit                              0x00007fff87241cc6 -[NSApplication _reopenWindowsAsNecessaryIncludingRestorableState:registeringAsReady:completionHandler:] + 331
8   AppKit                              0x00007fff87241a49 -[NSApplication(NSAppleEventHandling) _handleAEOpenEvent:] + 561
9   AppKit                              0x00007fff87241495 -[NSApplication(NSAppleEventHandling) _handleCoreEvent:withReplyEvent:] + 244
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-28 21:36:39

我无法找到一个可接受的内置解决方案,因此经过一些调试,我最终在NSDocumentController中找到了一个很好的覆盖点。这是一个非常棘手的解决方案--但这是我能想到的最好的解决方案。

[NSDocumentController openDocument:]是在基于Cocoa文档的应用程序中调用并处理Open加载的方法。这也是连接到File > Open菜单项的方法。所以有两个步骤是必要的。

1.)创建一个NSDocumentController子类并覆盖打开的文档。

代码语言:javascript
复制
@interface MyDocumentController : NSDocumentController

/// Connected to File>Open menu item in replacement of openDocument:.
/// openDocument: is called sometimes at app launch to present user with open window.
/// This has been disabled by overriding openDocument:
/// This method is now used in the Main Menu to replace it
- (IBAction)openDocumentOverride:(id)sender;

@end

代码语言:javascript
复制
#import "MyDocumentController.h"

@implementation MyDocumentController

// New method to replace openDocument: in File>Open menu item.
- (IBAction)openDocumentOverride:(id)sender {
    [super openDocument:sender];
}

// Override method to prevent call on app open
- (IBAction)openDocument:(id)sender {}

@end

2.)然后在MainMenu.xib中将File>Open菜单项连接到MyDocumentController openDocumentOverride:。

现在,“文件”>“打开”菜单项可以工作,但它无法在应用程序启动时显示“打开”框。

票数 0
EN

Stack Overflow用户

发布于 2021-02-02 12:34:54

我的NSDocumentController子类中的以下代码似乎也能工作:

代码语言:javascript
复制
override func runModalOpenPanel(_ openPanel: NSOpenPanel, forTypes types: [String]?) -> Int {
    if !NSApp.isActive {
        return 0
    }
    return super.runModalOpenPanel(openPanel, forTypes: types)
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30914489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档