2

以前に開いたドキュメントを復元せずに、アプリの起動時に新しいドキュメントの自動作成を無効にするドキュメント ベースのアプリケーションを作成しました。

ここで、アプリの起動時に表示される開いているパネルも無効にしたいと思います。

開いているパネルが、アプリのデリゲートの間applicationWillFinishLaunching:とその中で起動されることがあります。applicationDidFinishLaunching:

この機能を無効にする方法を理解できる唯一の方法は[NSDocumentController openDocument:]、サブクラスで上書きしてから、[ファイル] > [開く] メニューに接続するセカンダリ 'ヘルパー' メソッドを作成することです。これは非常にハッキーな解決策のようで、誰かがより良いアイデアを持っているかどうかを確認したいと考えています.

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
4

2 に答える 2

0

許容できる組み込みのソリューションを見つけることができなかったので、少しデバッグした後、最終的に NSDocumentController で適切なオーバーライド ポイントを見つけました。これは非常にハックな解決策ですが、私が思いついた最高のものです。

[NSDocumentController openDocument:]は、Cocoa ドキュメント ベースのアプリケーションで Open Panel の読み込みを取得して処理するメソッドです。これは、[ファイル] > [開く] メニュー項目に接続されているメソッドでもあります。したがって、2 つのステップが必要です。

1.) NSDocumentController サブクラスを作成し、開いているドキュメントをオーバーライドします。

@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

#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:] に接続します。


[ファイル] > [開く] メニュー項目が機能するようになりましたが、アプリの起動時に [開く] ボックスを表示できません。

于 2015-10-28T21:36:39.393 に答える