Domanda

Sto scrivendo un'applicazione che fa uso di uniformi di tipo identificatori . In particolare, sto chiamando UTTypeCreateAllIdentifiersForTag() e passandolo tipi diversi MIME .

La mia speranza è che questa funzione (da non confondersi UTTypeCreatePreferredIdentifierForTag()) mi avrebbe dato l'UTI più specifico, nonché tutte le infezioni del tratto urinario a cui è conforme. Questo non sembra essere il caso - restituisce un singolo UTI, o le IVU secondari sono spurie.

Non è la funzione UTTypeConformsTo() definita nello stesso file di intestazione, ma preferirei una funzione che restituisce un array di tutti i tipi a cui è conforme l'UTI.

Sembra che ci sia speranza per me, come MDItemCopyAttributeList() restituirà un tale elenco. Detto questo, richiede un MDItemRef, che può essere creato da un percorso di file o un URL - che non è eccezionale. A volte il mio dati vengono memorizzati solo in memoria e ho solo un tipo MIME da seguire.

Devo per scorrere l'intero database di IVU per ottenere queste informazioni o mi sto perdendo qualcosa?

È stato utile?

Soluzione

I è stato effettivamente mancava qualcosa: la soluzione molto evidente. Mentre stavo pesca a strascico attraverso i simboli esportati da LaunchServices (e ho notato l'interessante, ma UTTypeCopyPedigree() privato), mi sono ricordato di UTTypeCopyDeclaration(), che è definito.

UTTypeCopyDeclaration() viene dato un UTI e ritorna (come CFDictionaryRef) l'elenco di proprietà in cui è stato definito l'UTI. L'oggetto in questo dizionario con kUTTypeConformsToKey chiave è sia un CFArrayRef o CFStringRef. Nel caso di una matrice, si può ricorsivamente iterata fino a raggiungere un tipo di base.

In questo modo ho costruito un albero di ereditarietà per un dato UTI. Spero che questo aiuta chiunque altro con lo stesso problema.

Altri suggerimenti

https://github.com/nst/UTIsExplorer genera un grafico gerarchia di IVU in "dot "formato per graphviz.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top