我正在为Mac开发基于文档的应用程序。该应用程序有自己的数据模型和编写和阅读此类文档的方法。如果我想用预定义文档启动此应用程序,我可以通过以下方式执行此操作:打开命令行并键入
open -a /Applications/MyApp.app file
这只适用于参数" file
"是一种MyApp文档。现在我想用另一种文档(比如文本文件或其他文件)执行MyApp。例如:
open -a /Applications/MyApp.app text.rtf
应该读取delivered/committed
文本文件并将其自动插入到MyApp的完整新文档中。现在我尝试捕捉int main(int argc, char *argv[])
内的 text.rtf 。但我得到以下警告:
The document text.rtf could not be opened. MyApp cannot open files of this type
有人知道如何捕获参数并将其作为基于MyApp的全新文档的一部分导入吗?如何将其发送到NSApplication?
对任何帮助都很高兴。
答案 0 :(得分: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
处理程序适用于基于文档和非文档的应用程序。
答案 1 :(得分:0)
我认为你可以通过不使用open
而不是直接启动应用程序来解决这个问题,例如
/Applications/MyApp.app/Contents/MacOS/MyApp text.rtf
至少应该给你argv[1] = "text.rtf"
。