如何使用所有类型的UTIs初始化UIDocumentPickerViewController

20

我想打开 UIDocumentPickerViewController 并且允许用户选择所有类型的文件。我尝试在 UIDocumentPickerViewController init 方法中提及所有 UTI,但仍然无法为某些文件(如 rar、Visio 文件、mpp、mpt)找到有效的 UTI。

UIDocumentPickerViewController *documentPicker = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:[MingleUtils allowedUTIs] inMode:UIDocumentPickerModeImport];

并且

+(NSArray*)allowedUTIs{
    return @[@"public.data",@"public.content",@"public.audiovisual-content",@"public.movie",@"public.audiovisual-content",@"public.video",@"public.audio",@"public.text",@"public.data",@"public.zip-archive",@"com.pkware.zip-archive",@"public.composite-content",@"public.text"];
}
4个回答

33

如果你想允许任何文件类型,你应该使用

UIDocumentPickerViewController* documentPicker = 
  [[UIDocumentPickerViewController alloc] initWithDocumentTypes:@[@"public.data"]
                                                         inMode:UIDocumentPickerModeImport];

参见苹果文档了解UTI概念


"public.data" 不支持自定义扩展名。 - bLacK hoLE
2
在iOS 12.0上 - 没有崩溃,但也不允许我选择我想要的文件。 - Nikolay Suvandzhiev

13

Swift 5:

import MobileCoreServices

    let importMenu = UIDocumentPickerViewController(documentTypes: ["public.item"], in: .import)
    importMenu.delegate = self
    importMenu.modalPresentationStyle = .fullScreen
    self.present(importMenu, animated: true, completion: nil)

如果您在回复中使用委托,请将初始化程序添加到回复的代码中。 - Diego Jiménez
你也可以使用 [UTType.item] - BadmintonCat

1

我认为你最好使用 抽象UTI类型

使用 kUTTypeContent 和 kUTTypeItem 应该可以涵盖大部分文件类型。


1
UIDocumentPickerViewController* documentPicker = 
  [[UIDocumentPickerViewController alloc] initWithDocumentTypes:@[@"public.item"]
                                                         inMode:UIDocumentPickerModeImport];

1
断言错误的结果:传入的类型public.item不符合public.content或public.data。如果您正在导出新类型,请确保它符合适当的父类型。@"public.data"是正确的。 - mkirk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接