2010-07-25 5 views
0

У меня есть массив имен файлов, которые я бы хотел передать во внешнее приложение для открытия. Я хотел бы сделать одно из следующего:cocoa открыть несколько файлов с соответствующим приложением

a) Как-то поручить OSX открыть все эти файлы связанным с ним приложением, но он должен вызвать метод делегирования OpenFiles NSApplication целевого приложения b) Укажите приложение, чтобы открыть эти файлы с (а также вызывать openFiles)

В принципе, неважно, какое решение реализовать, поскольку эти файлы будут в любом случае связаны с целевым приложением. Как я могу сделать одну из этих вещей?

ответ

3

Чтобы открыть целую кучу файлов сразу, отправьте общий объект NSWorkspace an openURLs:withAppBundleIdentifier:options:additionalEventParamDescriptor:launchIdentifiers: message или позвоните по номеру the LSOpenURLsWithRole function или the LSOpenFromURLSpec function. В любом случае, вы передадите массив URL-адресов для открываемых элементов.

Каждый из них позволит вам определить конкретное приложение для использования. NSWorkspace позволяет указать его идентификатором пакета, в то время как две функции «Запуск служб» позволяют указать URL-адрес или FSRef для конкретного пакета приложений.

... он должен вызывать openFiles NSApplication метод делегата целевого приложения

Это не представляется возможным требовать, потому что (а) приложение может быть документ на основе, в этом случае он, вероятно, не есть делегат NSApplication, и, даже если это произойдет, такой делегат, вероятно, не ответит на application:openFiles:, и (б) приложение не может быть основано на Cocoa, и в этом случае оно будет обрабатывать событие Open Documents Apple Event напрямую. Ничто из этого не является бизнесом вашего приложения, поэтому не беспокойтесь об этом.

+0

В этом случае можно потребовать, потому что я создаю это приложение, и я реализую метод openFiles :. Поэтому было бы замечательно, если бы я мог сразу получить все имена файлов в целевом приложении. – Marius

+0

Marius: Достаточно справедливо. Пока вы открываете все документы сразу, а не отдельно, вы должны получить одно сообщение «applictaion: openFiles:» на принимающей стороне. Кроме того, вы можете прочитать исходный код для среды Growl, потому что мы делаем что-то подобное, открывая документ с помощью GrowlHelperApp. В частности, вы, вероятно, захотите использовать те же самые флаги открытия, которые мы делаем. –

+0

Спасибо. Попробуй свои предложения. – Marius

Смежные вопросы