Macintosh C Создание окна навигации для выбора приложения
-
06-07-2019 - |
Вопрос
Я пишу C-программу для Mac, и мне нужно разрешить пользователю выбирать приложение для отправки события Apple. Я могу создать окно навигации, используя NavCreateChooseFileDialog ()
, но не могу включить его для каких-либо файлов .app. Если я ограничу типы с помощью NavDialogSetFilterTypeIdentifiers
, это позволит мне выбирать только такие приложения, как MS Office, которые не имеют .app в имени папки. Все остальное затенено.
Есть идеи?
Решение
Обязательно установите флаг kNavSupportPackages в inOptions.optionFlags для NavCreateChooseFileDialog и поместите «APPL» в список типов (также можно использовать этот параметр вместо NavDialogSetFilterTypeIdentifiers (), так как вы будете работать с 10.3-) и тебе надо идти, я только что попробовал.
В качестве альтернативы, если вы не возражаете против использования Какао, вы можете использовать - [NSOpenPanel runModalForTypes: [NSArray arrayWithObjects: @ " app " ;, nil]] (в котором также перечислены приложения, не являющиеся приложениями), а затем вы ' re только один FSPathMakeRef ((UInt8 *) [path fileSystemRepresentation], & amp; fsRef, NULL); от FSRef.
Помните, что в любом случае полученный файл может быть псевдонимом, поэтому вам придется попытаться разрешить псевдонимы.
Другие советы
Помните, что .app-комплекты являются каталогами, поэтому вам может потребоваться включить какую-то опцию allow-directoryies (или, что более вероятно, enable-bundles).
Мне жаль, что я не могу предложить более конкретную помощь. Я начал с Carbon, но никогда не трогал Navigation Services.
Это работает для меня:
NSOpenPanel * panel = [ NSOpenPanel openPanel ] ;
panel.allowedFileTypes = @[ (__bridge id)kUTTypeApplication ] ;
[ panel runModal ] ;