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?

Foi útil?

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 ] ;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top