文档documentBrowser(_:didRequestDocumentCreationWithHandler:)说:"创建一个新文档并将其保存到临时位置.如果使用UIDocument子类创建文档,则必须在调用importHandler块之前将其关闭."
所以我通过获取用户临时目录(FileManager.default.temporaryDirectory)的URL 并附加名称和扩展名(获取类似"file:/// private/var/mobile/Containers/Data/Application/C1DE454D-EA1E-的路径)来创建文件URL 4166-B137-5B43185169D8/TMP/Untitled.uti").但是当我调用save(to:for:completionHandler:)传递此URL时,永远不会回调完成处理程序.我也尝试使用url(for:in:appropriateFor:create:)在用户的临时目录中传递一个子目录 - 仍然没有调用完成处理程序.
我理解文档浏览器视图控制器由一个单独的进程管理,该进程有自己的读/写权限.除此之外,我很难理解问题所在.临时保存新文档的位置,以便文档浏览器进程可以移动它们?
更新:截至目前的测试版,我现在看到一个错误的域NSFileProviderInternalErrorDomain和代码1被记录:"不允许读者访问该URL." 至少那是对发生的事情的确认......
我们已经为我们的 iOS 应用程序创建了 XML 格式的文件类型的自定义 UTI。除了谷歌驱动器之外,它适用于所有其他云服务提供商。我们使用 UIDocumentBrowserViewController 并在 app.plist 文件中定义了我们的自定义 UTI。尽管如此,谷歌驱动器将我们的应用程序文件显示为灰色,因为用户无法选择存储在驱动器中的文件。如果我们在 app.plist 中提供 public.xml 作为 UTI,我们可以打开该文件。但是我们不想在我们的应用程序中打开任何 XML 格式,因为我们已经为我们的应用程序定制了 XML 标签。任何解决问题的帮助/点将不胜感激。先感谢您。
我一直在研究一个新的基于文档的应用程序,并且非常高兴新的UIDocumentBrowserController ...试图为文档浏览器推出我自己的解决方案UI很棘手!
我在浏览器创建后打开文档时遇到了一些麻烦.
现在发生的是,当我选择在文档浏览器中创建新文档时,会按预期创建和打开文档,但会记录错误消息.但是,在关闭文档后,即使显示文档,也无法立即或在后续启动时重新打开文件.但是,一个奇怪的线索是,如果我在创建文档后停止运行应用程序,但没有向其添加新信息(触发保存周期),并再次运行项目,我可以正确打开文件.这让我觉得文件被保存的方式就是问题所在.(注意:在此阶段,我正在努力使本地,非/ icloud实现工作,然后我继续进行icloud实现.)
以下是文档保存到磁盘时代码中任何一点的错误消息(或至少大部分时间!):2017-06-20 13:21:58.254938-0500布道设计2 iOS [22454:5000138] [ default] [ERROR]无法获取项目文件的属性值:/// Users/stevenhovater/Library/Developer/CoreSimulator/Devices/9A4364F2-B3A1-4AD9-B680-FB4BC876C707/data/Containers/Data/Application/DD534ED8-C4A3 -40FE-9777-AED961976878 /文档/无标题-9.sermon.错误:错误域= NSFileProviderInternalErrorDomain代码= 1"不允许读者访问该URL." UserInfo = {NSLocalizedDescription =不允许读者访问该URL.}
我怀疑问题在于我的文档类型plists,我试图通过在wwdc 2017 session 229中模仿视频中的设置来设置.
我的文档被一个NSData对象所包围,使用我所采用的UIDocument非常标准的子类实现.(我省略了生成缩略图的代码)
override func contents(forType typeName: String) throws -> Any {
print("Saving Document Changes")
if sermon != nil {
let newData = NSKeyedArchiver.archivedData(withRootObject: sermon!)
return newData
} else {
let newData = NSKeyedArchiver.archivedData(withRootObject: Sermon())
return newData
}
}
override func fileAttributesToWrite(to url: URL, for saveOperation: UIDocumentSaveOperation) throws -> [AnyHashable : Any] {
let thumbnail:UIImage = self.createThumbnail() …Run Code Online (Sandbox Code Playgroud)