7

Uniform Type Identifiersを利用するアプリケーションを作成しています。具体的には、さまざまなMIMEタイプを呼び出しUTTypeCreateAllIdentifiersForTag()て渡しています。

私の希望は、この関数 ( とは異なりますUTTypeCreatePreferredIdentifierForTag()) が、最も具体的な UTI と、それが準拠するすべての UTI を提供してくれることでした。これは当てはまらないようです -- 単一の UTI を返すか、2 番目の UTI がスプリアスです。

同じヘッダー ファイルで関数がUTTypeConformsTo()定義されていますが、この UTI が準拠するすべての型の配列を返す関数が望ましいです。

MDItemCopyAttributeList()そのようなリストを返すように、私には希望があるようです。とは言っMDItemRefても、ファイル パスまたは URL から作成できる が必要です。これはあまり良くありません。場合によっては、データがメモリ内にのみ保存され、MIME タイプしか使用できないことがあります。

この情報を取得するには、UTI のデータベース全体を反復処理する必要がありますか?それとも何か不足していますか?

4

2 に答える 2

7

私は確かに何かが欠けていました:非常に明白な解決策。によってエクスポートされたシンボルをトロールしている間LaunchServices(そして興味深いがプライベートであることに気づきました)、定義されているUTTypeCopyPedigree()を思い出しました。UTTypeCopyDeclaration()

UTTypeCopyDeclaration()CFDictionaryRefUTIが与えられ、 UTIが定義されたプロパティリストを(として)返します。キーを持つこのディクショナリのオブジェクトは、またはkUTTypeConformsToKeyのいずれCFArrayRefCFStringRefです。配列の場合、基本型に到達するまで再帰的に繰り返すことができます。

これが、特定のUTIの継承ツリーを構築する方法です。これが同じ問題を抱えている他の人に役立つことを願っています。

于 2010-10-22T00:38:05.563 に答える
0

https://github.com/nst/UTIsExplorerは、graphviz の「ドット」形式で UTI の階層グラフを生成します。

于 2016-02-09T00:44:47.520 に答える