Перехват аргументов для создания нового документа с помощью приложения на основе документов на MAC
Я работаю над документным приложением для Mac. Это приложение имеет свою собственную модель данных и методы для написания и чтения такого рода документов. Если я хочу запустить это приложение с предопределенным документом, я могу сделать это следующим образом: откройте командную строку и введите
open -a /Applications/MyApp.app file
Это работает только если аргументfile
"является типом документа MyApp. Теперь я хотел бы выполнить MyApp с другим видом документа (например, текстовым файлом или чем-то еще). Например:
open -a /Applications/MyApp.app text.rtf
delivered/committed
текстовый файл должен быть прочитан и автоматически вставлен в новый документ из MyApp. Теперь я пытаюсь поймать text.rtf внутри int main(int argc, char *argv[])
, Но я получаю следующее предупреждение:
The document text.rtf could not be opened. MyApp cannot open files of this type
У кого-нибудь есть идея, как перехватить аргумент и импортировать его как часть полного нового документа на основе MyApp? Как я могу отправить его в NSApplication?
Буду рад любой помощи.
2 ответа
Файлы, которые передаются в командной строке, применяются, только если вы открываете приложение напрямую, например, как упоминает Пол Р.
Какао запускает приложения немного, но необычно, что происходит, когда исполняется двоичный файл, и вас просят обработать документы, которые передаются в сообщении. Это означает, что они не будут переданы вам в argv
массив.
Если вы хотите правильно обрабатывать прием всех типов файлов, вам нужно добавить обработчик openFiles к вашему делегату приложения, например:
-(void)application:(NSApplication *)sender openFiles:(NSArray *)filenames {
for (NSString *file in filenames) {
NSLog(@"%@", file);
}
[NSApp replyToOpenOrPrint:NSApplicationDelegateReplySuccess];
}
Это будет принимать любые файлы, даже те, которые вы не зарегистрированы, чтобы принять. Вы можете прослушать содержимое файла и отобразить соответствующее сообщение как часть openFiles
обработчик.
openFiles
Обработчик работает как для документов, так и для недокументированных приложений.
Я думаю, что вы можете обойти это, не используя open
и вместо этого непосредственно запустить приложение, например,
/Applications/MyApp.app/Contents/MacOS/MyApp text.rtf
Это должно, по крайней мере, дать вам argv[1] = "text.rtf"
,