鉴于UTI(统一类型标识符),找到它符合的所有类型
我正在编写一个使用Uniform Type Identifiers的应用程序。具体而言,我打电话UTTypeCreateAllIdentifiersForTag()
并传递各种MIME类型。鉴于UTI(统一类型标识符),找到它符合的所有类型
我希望这个功能(不同于UTTypeCreatePreferredIdentifierForTag()
)能给我最具体的UTI以及它所符合的所有UTI。这似乎并非如此 - 它要么返回单个UTI,要么次要UTI是假的。
在相同的头文件中定义了UTTypeConformsTo()
函数,但我更喜欢一个函数,该函数返回此UTI符合的所有类型的数组。
我似乎有希望,因为MDItemCopyAttributeList()
将返回这样的列表。也就是说,它需要一个MDItemRef
,它可以从文件路径或URL创建 - 这不是很好。有时我的数据只存储在内存中,我只有一个MIME类型。
我是否必须遍历UTI的整个数据库才能获取此信息,或者我是否错过了某些内容?
我确实错过了一些东西:非常明显的解决方案。虽然我通过LaunchServices
(并注意到有趣的,但私人UTTypeCopyPedigree()
)出口的符号拖网,我想起了UTTypeCopyDeclaration()
,其中是定义。
UTTypeCopyDeclaration()
被给予UTI并返回(作为CFDictionaryRef
)其中定义了UTI的属性列表。本字典中带有密钥kUTTypeConformsToKey
的对象是CFArrayRef
或CFStringRef
。在数组的情况下,可以递归迭代直到达到基类型。
这就是我为一个给定的UTI构建了一个继承树。我希望这可以帮助有同样问题的其他人。