2010-10-11 75 views
6

我正在编写一个使用Uniform Type Identifiers的应用程序。具体而言,我打电话UTTypeCreateAllIdentifiersForTag()并传递各种MIME类型。鉴于UTI(统一类型标识符),找到它符合的所有类型

我希望这个功能(不同于UTTypeCreatePreferredIdentifierForTag())能给我最具体的UTI以及它所符合的所有UTI。这似乎并非如此 - 它要么返回单个UTI,要么次要UTI是假的。

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

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

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

回答

7

我确实错过了一些东西:非常明显的解决方案。虽然我通过LaunchServices(并注意到有趣的,但私人UTTypeCopyPedigree())出口的符号拖网,我想起了UTTypeCopyDeclaration(),其中定义。

UTTypeCopyDeclaration()被给予UTI并返回(作为CFDictionaryRef)其中定义了UTI的属性列表。本字典中带有密钥kUTTypeConformsToKey的对象是CFArrayRefCFStringRef。在数组的情况下,可以递归迭代直到达到基类型。

这就是我为一个给定的UTI构建了一个继承树。我希望这可以帮助有同样问题的其他人。

相关问题