我正在编写一个利用的应用程序 统一类型标识符. 。具体来说,我在打电话 UTTypeCreateAllIdentifiersForTag() 并传递各种 哑剧 类型。

我希望这个功能(与 UTTypeCreatePreferredIdentifierForTag())将为我提供最具体的UTI以及它所符合的所有UTI。情况似乎并非如此 - 它要么返回单个UTI,要么次级UTI是虚假的。

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

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

我是否必须迭代整个UTI数据库才能获取此信息,或者我缺少一些东西?

有帮助吗?

解决方案

我确实缺少一些东西:非常明显的解决方案。当我拖到出口的符号时 LaunchServices (并注意到有趣的,但私人 UTTypeCopyPedigree()),让我想起 UTTypeCopyDeclaration(), , 哪一个 定义。

UTTypeCopyDeclaration() 给出UTI并返回(作为 CFDictionaryRef)定义UTI的属性列表。这个词典中的对象带有键 kUTTypeConformsToKeyCFArrayRef 或者 CFStringRef. 。在数组的情况下,可以递归迭代直到达到基本类型。

这就是我为给定UTI建立继承树的方式。我希望这对其他任何人都有帮助。

其他提示

https://github.com/nst/utisexplorer 为GraphViz生成utis的层次结构图。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top