0

Mac 用のドキュメントベースのアプリケーションに取り組んでいます。このアプリケーションには、そのような種類のドキュメントを読み書きするための独自のデータ モデルとメソッドがあります。このアプリケーションを定義済みのドキュメントで起動したい場合は、次の方法で実行できます。コマンド ラインを開いて、次のように入力します。

open -a /Applications/MyApp.app file

これは、引数 " file" が MyApp ドキュメントのタイプである場合にのみ機能します。ここで、別の種類のドキュメント (テキスト ファイルなど) で MyApp を実行したいと思います。例えば:

open -a /Applications/MyApp.app text.rtf

テキスト ファイルが読み取られ、delivered/committedMyApp から完全な新しいドキュメントに自動的に挿入されます。今、私は.rtf内のtext.rtfint main(int argc, char *argv[])をキャッチしようとしています。しかし、次の警告が表示されます。

The document text.rtf could not be opened. MyApp cannot open files of this type

誰かが引数をキャッチして、完全な新しい MyApp ベースのドキュメントの一部としてインポートする方法を知っていますか? どうすればそれを NSApplication に送信できますか?

どんな助けでもうれしいです。

4

2 に答える 2

2

コマンドラインで渡されるファイルは、Paul R が言及するように、アプリケーションを直接開いた場合にのみ適用されます。

Cocoa はアプリケーションを少しだけ起動しますが、通常とは異なり、バイナリが実行され、メッセージで渡されたドキュメントを処理するように求められます。argvこれは、それらが配列で渡されないことを意味します。

すべてのファイル タイプの受け入れを適切に処理するには、次のような openFiles ハンドラーをアプリ デリゲートに追加する必要があります。

-(void)application:(NSApplication *)sender openFiles:(NSArray *)filenames {
    for (NSString *file in filenames) {
        NSLog(@"%@", file);
    }
    [NSApp replyToOpenOrPrint:NSApplicationDelegateReplySuccess];
}

これにより、受け入れるように登録されていないファイルも含め、すべてのファイルが受け入れられます。ファイルの内容を盗聴し、openFilesハンドラーの一部として適切なメッセージを表示できます。

openFilesハンドラーは、ドキュメント ベースのアプリケーションと非ドキュメント ベースのアプリケーションの両方で機能します。

于 2014-12-08T10:50:42.537 に答える
0

openアプリケーションを使用せずに直接起動することで、これを回避できると思います。

/Applications/MyApp.app/Contents/MacOS/MyApp text.rtf

これにより、少なくともargv[1] = "text.rtf".

于 2014-12-08T09:12:29.867 に答える