Я обновляю некоторый старый код, чтобы избежать устаревших вещей и использовать новые 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 и т. д.?
Просто typeWithFilenameExtension: не работает?
@ Cy-4AH Cy-4AH Я не уверен, что ты понимаешь суть. Я знаю, как заставить это работать, и пытаюсь выяснить, есть ли -элегантный- и -правильный- способ заставить это работать. Конечно, я мог бы добавить xls, xlsx, numbers и т. д. к typeWithFilenameExtension:, но я бы предпочел использовать концептуальный тип UTTypeSpreadsheet, чтобы iOS могла обрабатывать все известные ей типы электронных таблиц, а не просто расширения имен файлов, о которых я мог подумать в начале время... а потом пусть пользователи обманывают меня, удаляя расширения файлов из своих документов или что-то в этом роде. Известно, что они делают странные вещи.
@Paulw11 Да, я знаю, что типы перечислены в документации, и именно там я получил несколько, на которые я ссылался в исходном вопросе (и я уже включил UTTypeText в свои принятые типы, но когда я включаю UTTypeText, он не соответствует Документы Word). Я не смог найти в списке типов документов, и это показалось странным упущением, поскольку для электронных таблиц и презентаций существовал UTType. Вот поэтому я и спросил здесь, потому что, возможно, я что-то упустил в документации UTType.





Нет, среди форматов файлов текстовых процессоров нет общих идентификаторов, за исключением самых общих 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"
)
Все типы перечислены в документации. Может быть, Developer.apple.com/documentation/uniformtypeidentifiers/uttype/… ?