0

我正在为 Mac开发基于文档的应用程序。该应用程序有自己的数据模型和方法来编写和读取此类文档。如果我想使用预定义的文档启动此应用程序,我可以通过以下方式进行:打开命令行并输入

open -a /Applications/MyApp.app file

这仅在参数“ file”是 MyApp Document 类型时才有效。现在我想用另一种文档(如文本文件或其他文件)执行 MyApp。例如:

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

delivered/committed文本文件应该被读取并自动从 MyApp 插入到一个完整的新文档中。现在我尝试. int 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 回答