アプリケーションデリゲートの「開く」メニューコマンドのハンドラーを書き直すのはとても上手だと思いました。
- (IBAction)openDocument:(id)sender {
NSOpenPanel * const panel = [NSOpenPanel openPanel];
panel.allowsMultipleSelection = YES;
panel.delegate = self;
[panel beginWithCompletionHandler:^(NSInteger result) {
if (result == NSFileHandlingPanelOKButton) {
NSMutableArray * const paths = [NSMutableArray arrayWithCapacity:panel.URLs.count];
for (NSURL *file in panel.URLs) {
[paths addObject:file.path];
}
[self application:NSApp openFiles:paths];
}
}];
}
古いコードでは、各ファイル URL をループして、ウィンドウ作成コードを直接呼び出していました。次に、単一ファイルの実装をその複数ファイルのバリアントに交換し、-application:openFile:
そのコードを 内で再利用することにしました-openDocument:
。
大丈夫だと思いました。
単一ファイル バージョンは、成功を示す BOOL を返します。マルチファイル バージョンでは、アプリケーション オブジェクトの特別な関数を呼び出す必要があります。
いくつかのファイルでアプリを起動すると、Cocoa のハンドラーはファイルを開く AppleEvent でそれらを調べ、 を呼び出し-application:openFiles:
、応答グローバルが設定されるのを待ってから、AppleEvent 応答を返します。で再利用-application:openFiles:
すると-openDocument
、アプリケーション オブジェクトが期待していないときにそのグローバルに投稿します....ああ、くそ。
ああ、ファイルをオープンファイル AppleEvent に入れて自分自身に送信することで、ファイルを送信して処理することができました。ドキュメントに目を通すと、必要なもの以外はすべて表示されます。AppleEvent の送信方法と、可能な AppleEvents とそのパラメータのリストです。
オープンファイルの AppleEvent を作成して送信する方法を説明してくれる人はいますか? または、少なくともイベント ID とパラメーターのテーブルがどこにあるか教えてください。(スクリプトに関するさまざまな Cocoa ガイドは、イベント ID リファレンスを参照していますが、これは無効なリンクであり、Apple の開発者ポータルの一般/検索ページにつながっています。)