Учитывая UTI (идентификатор единого типа), найдите все типы, которым он соответствует

StackOverflow https://stackoverflow.com/questions/3903953

Вопрос

Я пишу приложение, которое использует Однородные идентификаторы типа. Анкет В частности, я звоню UTTypeCreateAllIdentifiersForTag() и передавать это различным Мима типы

Моя надежда была то, что эта функция (в отличие от UTTypeCreatePreferredIdentifierForTag()) даст мне самые специфические UTI, а также все UTIS, к которым он соответствует. Это кажется, что это не так - это либо возвращает один UTI, либо вторичный UTIS ложки.

Здесь UTTypeConformsTo() Функция определена в одном файле заголовка, но я предпочел функцию, которая возвращает массив всех типов, к которым этот UTI соответствует.

Там, кажется, на меня надежда, как MDItemCopyAttributeList() Вернут такой список. Тем не менее, это требует MDItemRef, который может быть создан из пути файла или URL-адреса - который не отлично. Иногда мои данные хранятся только в памяти, и у меня есть только тип MIME.

Должен ли я перейти через всю базу данных UTIS, чтобы получить эту информацию или мне что-то упустить?

Это было полезно?

Решение

Я действительно не хватал чего-то: очень очевидное решение. В то время как я разговаривал через символы, экспортируемые LaunchServices (и заметил интересный, но частное UTTypeCopyPedigree()), Я напомнил о UTTypeCopyDeclaration(), который является определенный.

UTTypeCopyDeclaration() дается ИМП и возврат (как CFDictionaryRef) Список свойств, в котором был определен UTI. Объект в этом словаре с ключом kUTTypeConformsToKey либо а CFArrayRef или CFStringRef. Анкет В случае массива можно рекурсивно повторить, пока не будет достигнут базовый тип.

Вот как я создал дерево наследства для данного UTI. Я надеюсь, что это поможет кому-либо еще с той же проблемой.

Другие советы

https://github.com/nst/utisexplorer Создает график иерархии UTIS в формате «DOT» для Graphviz.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top