给定UTI(统一类型标识符),找到它符合的所有类型

时间:2010-10-11 06:37:44

标签: macos uti core-services launch-services

我正在编写一个使用Uniform Type Identifiers的应用程序。具体来说,我正在调用UTTypeCreateAllIdentifiersForTag()并将其传递给各种MIME类型。

我希望这个功能(与UTTypeCreatePreferredIdentifierForTag()不同)会给我最具体的UTI以及它所符合的所有UTI。这似乎不是这种情况 - 它要么返回单个UTI,要么辅助UTI是虚假的。

在同一个头文件中定义了UTTypeConformsTo()函数,但我更喜欢一个返回此UTI符合的所有类型数组的函数。

我似乎有希望,因为MDItemCopyAttributeList()会返回这样的清单。也就是说,它需要MDItemRef,可以从文件路径或URL创建 - 这不是很好。有时我的数据只存储在内存中,我只有一种MIME类型。

我是否必须遍历UTI的整个数据库以获取此信息,或者我错过了哪些内容?

2 个答案:

答案 0 :(得分:7)

我确实遗漏了一些东西:非常明显的解决方案。当我浏览LaunchServices导出的符号时(注意到有趣但私密的UTTypeCopyPedigree()),我被提醒UTTypeCopyDeclaration(),其中定义的。

UTTypeCopyDeclaration()被赋予UTI并返回(作为CFDictionaryRef)定义UTI的属性列表。此词典中包含键kUTTypeConformsToKey的对象可以是CFArrayRefCFStringRef。在数组的情况下,可以递归迭代直到达到基类型。

这是我为给定的UTI构建继承树的方法。我希望这可以帮助其他人解决同样的问题。

答案 1 :(得分:0)

https://github.com/nst/UTIsExplorer为graphviz生成“点”格式的UTI层次结构图。