开发者社区> 莫云溪> 正文

访问沙盒外文档UIDocumentPickerViewController

简介: 官方文档解析 官方文档:https://developer.apple.com/documentation/uikit/uidocumentpickerviewcontroller?language=objc UIDocumentPickerViewController有四种模式: Import an external document:用户选择一个外部文档,文档选择器拷贝该文档到应用沙盒,不会修改源文档。
+关注继续查看

官方文档解析

官方文档:https://developer.apple.com/documentation/uikit/uidocumentpickerviewcontroller?language=objc

UIDocumentPickerViewController有四种模式:

  • Import an external document:用户选择一个外部文档,文档选择器拷贝该文档到应用沙盒,不会修改源文档。
  • Export a local document:文档选择器拷贝文档到一个外部路径,不会修改源文档。
  • Open an external document:打开一个外部文档,用户可以修改该文档。
  • Move a local document:拷贝文档到外部路径,同时可以修改该拷贝。

操作外部文件注意事项

  • open与move操作会提供外部文件的security-scoped URL 。调用startAccessingSecurityScopedResource开始访问,访问完成调用stopAccessingSecurityScopedResource
  • 使用NSFileCoordinator来操作外部文件
  • 使用NSFilePresenter来展示外部文件内容
  • 不要存储security-scoped URL

调用Demo

展示文件选择

- (void)presentDocumentPicker {
    NSArray *types = @[]; // 可以选择的文件类型
    UIDocumentPickerViewController *documentPicker = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:types inMode:UIDocumentPickerModeOpen];
    documentPicker.delegate = self;
    documentPicker.modalPresentationStyle = UIModalPresentationFullScreen;
    [self presentViewController:documentPicker animated:YES completion:nil];
}

用户选择文件回调

- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentAtURL:(NSURL *)url {
    BOOL canAccessingResource = [url startAccessingSecurityScopedResource];
    if(canAccessingResource) {
        NSFileCoordinator *fileCoordinator = [[NSFileCoordinator alloc] init];
        NSError *error;
        [fileCoordinator coordinateReadingItemAtURL:url options:0 error:&error byAccessor:^(NSURL *newURL) {
            NSData *fileData = [NSData dataWithContentsOfURL:newURL];
            NSArray *arr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
            NSString *documentPath = [arr lastObject];
            NSString *desFileName = [documentPath stringByAppendingPathComponent:@"myFile"];
            [fileData writeToFile:desFileName atomically:YES];
            [self dismissViewControllerAnimated:YES completion:NULL];
        }];
        if (error) {
            // error handing
        }
    } else {
        // startAccessingSecurityScopedResource fail
    }
    [url stopAccessingSecurityScopedResource];
}

文件类型定义

initWithDocumentTypes:inMode:中,types需要传入一个uniform type identifiers (UTIs)数组。关于UTIs的官方文档,常见列表

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
jQuery EasyUI API 中文文档 - 组合树(ComboTree)
ComboTree 组合树 扩展自 $.fn.combo.defaults 和 $.fn.tree.defaults。用 $.fn.combotree.defaults 重写了defaults。
936 0
DNS 访问 Service - 每天5分钟玩转 Docker 容器技术(138)
在 Cluster 中,除了可以通过 Cluster IP 访问 Service,Kubernetes 还提供了更为方便的 DNS 访问。
1289 0
使用typeDoc快速生成开发文档
使用typeDoc快速生成开发文档
146 0
jQuery EasyUI API 中文文档 - 窗口(Window)
Window 窗口    扩展自 $.fn.panel.defaults,用 $.fn.window.defaults 重写了 defaults。 依赖 draggable resizable panel 用法 1.
660 0
访问沙盒外文档UIDocumentPickerViewController
官方文档解析 官方文档:https://developer.apple.com/documentation/uikit/uidocumentpickerviewcontroller?language=objc UIDocumentPickerViewController有四种模式: Import an external document:用户选择一个外部文档,文档选择器拷贝该文档到应用沙盒,不会修改源文档。
3770 0
jQuery EasyUI API 中文文档 - 微调器(Spinner)
Spinner 微调器 扩展自 $.fn.validatebox.defaults,用 $.fn.spinner.defaults 重写了 defaults。 依赖 validatebox 用法 1. 1. $('#ss').spinner({   2.     required:true,   3.     increment:10   4. });  特性 其特性扩展自 validatebox,下列是为 spinner 增加的特性。
817 0
+关注
莫云溪
iOS开发攻城狮。
17
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载