Domanda

Sto scrivendo un programma C per mac e devo consentire all'utente di scegliere un'applicazione a cui inviare un evento Apple. Posso creare una finestra di navigazione utilizzando NavCreateChooseFileDialog () , ma non riesco a ottenerlo per abilitare alcun file .app. Se restringo i tipi usando NavDialogSetFilterTypeIdentifiers , mi permetterà solo di selezionare applicazioni come MS Office, che non hanno .app nel nome della cartella. Tutto il resto è disattivato.

Qualche idea?

È stato utile?

Soluzione

Assicurati di impostare il flag kNavSupportPackages in inOptions.optionFlags per NavCreateChooseFileDialog e inserisci 'APPL' nell'elenco dei tipi (potresti anche usare quel parametro invece di NavDialogSetFilterTypeIdentifiers (), in questo modo eseguirai il 10.3-) e dovresti essere bravo ad andare, ho appena provato.

In alternativa, se non ti dispiace usare Cocoa, puoi usare - [NSOpenPanel runModalForTypes: [NSArray arrayWithObjects: @ " app " ;, nil]] (che elenca anche applicazioni non.app), e poi ' è solo un FSPathMakeRef ((UInt8 *) [percorso fileSystemRepresentation], & amp; fsRef, NULL); lontano da un FSRef.

Ricorda che, in entrambi i casi, il file che ottieni potrebbe essere un alias, quindi dovrai provare a risolvere gli alias.

Altri suggerimenti

Ricorda che i bundle .app sono directory, quindi potresti dover abilitare una sorta di opzione allow-directory (o, più probabilmente, enable-bundles).

Mi dispiace di non poter offrire un aiuto più specifico. Ho iniziato con Carbon, ma non ho mai toccato i Servizi di navigazione.

Questo funziona per me:

NSOpenPanel * panel = [ NSOpenPanel openPanel ] ;
panel.allowedFileTypes = @[ (__bridge id)kUTTypeApplication ] ;

[ panel runModal ] ;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top