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

Sed*_*ien 6 macos uti core-services launch-services

我正在编写一个使用统一类型标识符的应用程序.具体来说,我正在调用UTTypeCreateAllIdentifiersForTag()并传递各种MIME类型.

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

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

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

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

Sed*_*ien 7

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

UTTypeCopyDeclaration()给出一个UTI并返回(作为CFDictionaryRef)定义UTI的属性列表.带有键的字典中的对象kUTTypeConformsToKey是a CFArrayRefCFStringRef.在数组的情况下,可以递归迭代直到达到基类型.

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