使用 UIDocumentBrowserViewController 重命名文档
Posted
技术标签:
【中文标题】使用 UIDocumentBrowserViewController 重命名文档【英文标题】:Document Renaming with UIDocumentBrowserViewController 【发布时间】:2018-10-30 14:43:33 【问题描述】:我正在使用 UIDocumentBrowserViewController 使用“新方式”来存储文档(ios 11+)。不需要 iCloud API、权利等——只需工作(在单独的文档浏览器进程的控制下)。
但是,我还没有弄清楚如何以这种方式以编程方式重命名(即移动)文档,至少在 iCloud 中是这样。标准的“url.setResourceValues()”在本地文件系统上工作得很好,但在 iCloud 中呈现 513/not allowed。当创建的文档实际上是通过文档浏览器控制时,所有以前的方法(使用全套 iCloud 功能和权利,使用复杂的 FileCoordinator 编排等)也不起作用。
我找不到任何合理的文档或示例,说明如何使用 UIDocumentBrowser 在它(以及我的)控制下移动文档。 UIDocumentBrowserImportModeMove 模式可以满足我的需要,但是我不知道如何在给定的 UIDocument 上以编程方式启动它。
有没有人有过这样做的经验?
谢谢,习惯
【问题讨论】:
【参考方案1】:在用户选择文档后,没有 API 可以移动文档浏览器返回给您的文档。您应该向 Apple 提交错误以获得一个。
如果这是在您的 iCloud 容器内,您可以使用 iCloud 权利和-[NSFileManager URLForUbiquityContainerIdentifier:]
来获得对您的容器的沙箱访问权限,并使用 NSFileManager 在里面做任何您想做的事情;但这不适用于容器外部的 iCloud 或其他文件提供程序(Dropbox...)。
【讨论】:
谢谢,我会归档雷达。使用 UIDocumentBrowser,您不需要显式的云容器配置。 UIDocument 和 UIDocumentBrowser 的价值主张是为您完成所有关于所有权和权限的繁重工作,所以 setResourceValue(name) 恕我直言,应该能够与 UIDocumentBrowser 流程合作。 如果文件在磁盘上实现... 使用新的文件提供程序 API,某些文件可能根本不存在,直到您协调读取它们。重命名磁盘上不存在的文件或可能需要新 API 的占位符。对于下载的文件,我同意 NSFileManager 应该在一个理想的世界中工作,但需要告知云提供商这一举动......无论如何,是的,Apple 需要找到一种方法来使其在任何情况下都能正常工作,并且需要一个雷达是要走的路。 文件已经在磁盘/iCloud上。创建的编排也是“复制本地-> 云,从那里打开”,所以当我被要求打开 UIDocument 时,它已经在那里了。我想编辑加载的 UIDocument 的资源名称。无论如何,对于直接从 iCloud 驱动器打开的现有文档,它也不起作用。 对于 iCloud Drive 中现有的下载文档,如果您使用 URLForUbiquityContainerIdentifier 请求沙箱访问(不要忘记开始访问),您应该能够使用 NSFileManager 移动它们。但这并不能解决一般问题,同意。以上是关于使用 UIDocumentBrowserViewController 重命名文档的主要内容,如果未能解决你的问题,请参考以下文章
在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?
Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)