Стандартный UTType для документов Word с UIDocumentPickerViewController?

Я обновляю некоторый старый код, чтобы избежать устаревших вещей и использовать новые API с UIDocumentPickerViewController. Раньше мне приходилось перечислять кучу пользовательских строк для различных типов файлов, например:

NSArray<NSString*> *types = @[
    (__bridge NSString *)kUTTypePDF,
    (__bridge NSString *)kUTTypeText,
    
    @"com.microsoft.word.doc",
    @"org.openxmlformats.wordprocessingml.document",
    
    @"com.microsoft.excel.xls",
    @"org.openxmlformats.spreadsheetml.sheet",
    
    @"com.microsoft.powerpoint.ppt",
    @"org.openxmlformats.presentationml.presentation",
    
    @"com.apple.iwork.pages.sffpages",
    @"com.apple.iwork.numbers.sffnumbers",
    @"com.apple.keynote.key",
    
    @"public.zip-archive",
];

UIDocumentPickerViewController *picker = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:types inMode:UIDocumentPickerModeImport];

Но я хочу использовать более новую версию -initForOpeningContentTypes и использовать UTType, которая имеет гораздо больше встроенных типов, которые также охватывают множество форм этих типов. Например, вместо того, чтобы объявлять com.microsoft.excel.xls и org.openxmlformats.spreadsheetml.sheet для файлов xls и xlsx, я могу просто объявить:

NSArray<UTType*> *types = @[
    UTTypePDF,
    UTTypeText,
    UTTypePresentation,
    UTTypeSpreadsheet,
    UTTypeZIP,
    [UTType typeWithIdentifier:@"com.microsoft.word.doc"],
    [UTType typeWithIdentifier:@"org.openxmlformats.wordprocessingml.document"],
    [UTType typeWithIdentifier:@"com.apple.iwork.pages.sffpages"],
];

UIDocumentPickerViewController *picker = [[UIDocumentPickerViewController alloc] initForOpeningContentTypes:types asCopy:YES];

Однако я не могу найти встроенный UTType, который будет охватывать «текстовые документы», такие как doc, docx иpages. Насколько я могу судить, мне все еще нужно использовать для них необработанные строковые константы, но я надеюсь, что есть встроенный тип, который я могу использовать, и, возможно, я просто упускаю его в документации.

Существует ли документ UTType текстового редактора, который охватывает doc, docx, pages и т. д., аналогично тому, как UTTypeSpreadsheet охватывает xls, xlsx, numbers и т. д.?

Все типы перечислены в документации. Может быть, Developer.apple.com/documentation/uniformtypeidentifiers/utt‌​ype/… ?

Paulw11 22.05.2024 01:16

Просто typeWithFilenameExtension: не работает?

Cy-4AH 24.05.2024 12:24

@ Cy-4AH Cy-4AH Я не уверен, что ты понимаешь суть. Я знаю, как заставить это работать, и пытаюсь выяснить, есть ли -элегантный- и -правильный- способ заставить это работать. Конечно, я мог бы добавить xls, xlsx, numbers и т. д. к typeWithFilenameExtension:, но я бы предпочел использовать концептуальный тип UTTypeSpreadsheet, чтобы iOS могла обрабатывать все известные ей типы электронных таблиц, а не просто расширения имен файлов, о которых я мог подумать в начале время... а потом пусть пользователи обманывают меня, удаляя расширения файлов из своих документов или что-то в этом роде. Известно, что они делают странные вещи.

Kenny Wyland 28.05.2024 21:14

@Paulw11 Да, я знаю, что типы перечислены в документации, и именно там я получил несколько, на которые я ссылался в исходном вопросе (и я уже включил UTTypeText в свои принятые типы, но когда я включаю UTTypeText, он не соответствует Документы Word). Я не смог найти в списке типов документов, и это показалось странным упущением, поскольку для электронных таблиц и презентаций существовал UTType. Вот поэтому я и спросил здесь, потому что, возможно, я что-то упустил в документации UTType.

Kenny Wyland 28.05.2024 21:18
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
78
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Нет, среди форматов файлов текстовых процессоров нет общих идентификаторов, за исключением самых общих public.item, public.content и т. д.

Вы можете просмотреть «дерево» UTType с помощью команды mdls. Это результаты для .doc, .docx, .pages:

% mdls -name kMDItemContentTypeTree foo.pages
kMDItemContentTypeTree = (
    "com.apple.iwork.pages.sffpages",
    "public.data",
    "public.item",
    "public.composite-content",
    "public.content"
)
% mdls -name kMDItemContentTypeTree foo.docx
kMDItemContentTypeTree = (
    "org.openxmlformats.wordprocessingml.document",
    "org.openxmlformats.openxml",
    "public.data",
    "public.item",
    "public.composite-content",
    "public.content"
)
% mdls -name kMDItemContentTypeTree foo.doc
kMDItemContentTypeTree = (
    "com.microsoft.word.doc",
    "public.data",
    "public.item",
    "public.composite-content",
    "public.content"
)

С другой стороны, электронные таблицы имеют public.spreadsheet общие черты:

% mdls -name kMDItemContentTypeTree foo.numbers 
kMDItemContentTypeTree = (
    "com.apple.iwork.numbers.sffnumbers",
    "public.data",
    "public.item",
    "public.composite-content",
    "public.content",
    "public.spreadsheet"
)
% mdls -name kMDItemContentTypeTree foo.xlsx 
kMDItemContentTypeTree = (
    "org.openxmlformats.spreadsheetml.sheet",
    "org.openxmlformats.openxml",
    "public.data",
    "public.item",
    "public.composite-content",
    "public.content",
    "public.spreadsheet"
)

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