Macintosh C Criando uma janela de navegação para escolher um aplicativo
-
06-07-2019 - |
Pergunta
Eu estou escrevendo um programa C para Mac, e eu preciso permitir que o usuário escolha um aplicativo para enviar um evento da Apple para. Eu posso criar uma janela de navegação, usando NavCreateChooseFileDialog()
, mas eu não posso obtê-lo para permitir que todos os arquivos .app. Se eu restringir os tipos usando NavDialogSetFilterTypeIdentifiers
, ele só me permite selecionar aplicativos como o MS Office, que não têm .app no ??nome da pasta. Tudo o resto é acinzentado.
Todas as idéias?
Solução
Certifique-se de definir as kNavSupportPackages bandeira em inOptions.optionFlags para NavCreateChooseFileDialog, e colocar 'APPL' na lista de tipos (pode muito bem ainda usar que param em vez de NavDialogSetFilterTypeIdentifiers (), de que maneira você vai correr em 10.3-) e você deve ser bom para ir, eu apenas tentei.
Como alternativa, se você não se importa com Cacau, você pode usar - [NSOpenPanel runModalForTypes: [NSArray arrayWithObjects: @ "app", nil]] (que também lista os aplicativos non-.app), e então você está apenas um FSPathMakeRef ((UINT8 *) [caminho fileSystemRepresentation], & fsRef, NULL); longe de uma FSRef.
Lembre-se que, em ambos os casos, o arquivo que você recebe pode ser um alias para que você terá que tentar e aliases resolver.
Outras dicas
Lembre-se que .app pacotes são diretórios, assim você pode precisar para permitir algum tipo de permitem-diretórios (ou, mais provavelmente, permitem-feixes) opção.
Eu sinto muito que eu não posso oferecer ajuda mais específica. Comecei com carbono, mas nunca tocou serviços de navegação.
Isso funciona para mim:
NSOpenPanel * panel = [ NSOpenPanel openPanel ] ;
panel.allowedFileTypes = @[ (__bridge id)kUTTypeApplication ] ;
[ panel runModal ] ;