Macintosh C Creazione di una finestra di navigazione per scegliere un'app
-
06-07-2019 - |
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?
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 ] ;