给定UTI(统一类型标识符),找到其符合的所有类型
-
29-09-2019 - |
题
我正在编写一个利用的应用程序 统一类型标识符. 。具体来说,我在打电话 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生成utis的层次结构图。