Перехват аргументов для создания нового документа с помощью приложения на основе документов на 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",

Другие вопросы по тегам