UTI(均一なタイプ識別子)が与えられた場合、それが適合するすべてのタイプを見つけます

StackOverflow https://stackoverflow.com/questions/3903953

質問

私はそれを利用するアプリケーションを書いています 均一なタイプ識別子. 。具体的には、私は呼んでいます UTTypeCreateAllIdentifiersForTag() そしてそれをさまざまに渡します マイム タイプ。

私の希望は、この機能(とは異なるものとして UTTypeCreatePreferredIdentifierForTag())最も具体的なUTIと、それが適合するすべてのUTIを私に与えます。これは事実ではないように見えます - 単一のUTIを返すか、二次UTIが偽物であるかのいずれかです。

そこには UTTypeConformsTo() 同じヘッダーファイルで定義された関数ですが、このUTIが適合するすべてのタイプの配列を返す関数を好みます。

私には希望があるようです MDItemCopyAttributeList() そのようなリストを返します。とはいえ、それは必要です MDItemRef, 、ファイルパスまたはURLのいずれかから作成できますが、これはあまり良くありません。時々、私のデータはメモリ内でのみ保存され、私は通り過ぎるマイムタイプしか持っていません。

この情報を取得するには、UTIのデータベース全体を繰り返す必要がありますか、それとも何かが足りませんか?

役に立ちましたか?

解決

私は確かに何かを見逃していました:非常に明白な解決策。私がエクスポートされたシンボルをトロールしている間 LaunchServices (そして、興味深いがプライベートに気づいた UTTypeCopyPedigree())、私は思い出しました UTTypeCopyDeclaration(), 、 どれの 定義されています。

UTTypeCopyDeclaration() UTIが与えられ、戻ります( CFDictionaryRef)UTIが定義されたプロパティリスト。この辞書のオブジェクトはキーを使用しています kUTTypeConformsToKey どちらかです CFArrayRef また CFStringRef. 。配列の場合、ベースタイプに達するまで再帰的に反復することができます。

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

他のヒント

https://github.com/nst/utisexplorer GraphVizの「DOT」形式でUTIの階層グラフを生成します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top