2010-05-20 2 views
2

Я использую LSOpenItemsWithRole(), чтобы открыть любой файл из моего приложения. Он отлично работает для всех файлов, которые имеют приложение по умолчанию на Mac, но для файлов, которые невозможно открыть с помощью приложения по умолчанию, этот метод возвращает ошибку kLSApplicationNotFoundErr и ничего не делает.Как запустить диалог «Выбрать приложение» на Mac?

В таких случаях я хочу, чтобы мое приложение запустило диалоговое окно «Выбрать приложение», чтобы конечные пользователи могли выбирать из него любое приложение, чтобы открыть файл. Это диалоговое окно появляется, когда любой такой файл открывается напрямую двойным щелчком. Есть ли какой-либо прямой вызов API, чтобы сделать то же самое?

Я не хочу использовать вызов Objective C, есть ли способ сделать это, используя вызовы API Carbon?

+1

Хотелось бы, чтобы ho запустил мой диалог «Выбрать файл» на Mac ... :) –

+0

I ' вы объединили свои две незарегистрированные аккаунты. Теперь вы сможете комментировать/редактировать, не публикуя новый ответ. –

ответ

4

Вы должны использовать NSOpenPanel, начиная с пользователя в использовании папки «Приложения» и с помощью метода делегирования panel:shouldEnableURL:, чтобы отфильтровать пути, которые не заканчиваются на .app. Вы можете использовать setAccessoryView: для добавления каких-либо настраиваемых параметров в диалог. Это то, что делает Finder, когда вы нажимаете «Other ...», когда выбираете, какое приложение использовать.

+0

Спасибо Кен за быстрый ответ, Я не хочу, чтобы нам Цель C-вызов, есть ли способ сделать это, используя вызовы API Carbon? Manish – Manish

+2

Оцените это - Objective-C является основным языком разработки на Mac OS X. –

1

Я думаю, вы можете сделать это, используя NavCreateChooseFileDialog, с помощью NavCustomControl, чтобы установить начальное местоположение и NavDialogSetFilterTypeIdentifiers для фильтрации вне приложений. (Почему вы не хотите использовать Objective-C? Вы знаете, что вы можете смешивать углерод и какао в одном приложении, верно?)

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