问题标签 [uidocumentbrowservc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - 在 UIDocumentBrowserVC 中自动选择 UIDocument
我正在使用一个uidocumentbrowservc
并想以UIDocument
编程方式选择一个。在我的情况下,这是因为我想在UIDocument
启动时自动加载上次用于节省用户的时间,因为我的应用程序很少更改文档。
我天真的方法是将上次使用的存储URL
在UserDefaults
. 然后在viewDidLoad()
我的 uidocumentbrowservc
我打电话presentDocument(at: URL)
。但它不起作用。当我打电话时,URL.checkResourceIsReachable()
我得到了错误:
错误域 = NSCocoaErrorDomain 代码 = 257 “文件“myFile”无法打开,因为您无权查看它。”
文件路径为:
据我了解,我无权访问它,因为它不在我的沙箱中(它可能在用户保存它的任何地方?)。
有什么建议么?我相信存在更好的方法来做到这一点。
objective-c - 使用 DocumentBrowserViewController 将文档导入应用程序的文档浏览器
我已经在一个简单的基于文档的 iOS 应用程序中声明了一个自定义导出 UTI 类型。我现在正在尝试提供将相同类型的文件从 Mail 导入应用程序的功能。
当长按消息中的文档图标时,我可以选择“复制到 MyApp”,然后调用 AppDelegate.m 中的方法:
然而,文档被呈现,但没有被导入(revealedDocumentURL
与 相同,并且不调用inputURL
委托方法)。importDocumentAtURL
也许我不应该使用revealDocumentAtURL 方法?我无法使用该importDocumentAtURL: nextToDocumentAtURL: mode: completionHandler:
方法,因为我无法为nextToDocumentAtURL
参数指定文档。有没有办法将文档导入特定目录?也许我错过了一些非常明显的东西?另外,这是我的 info.plist 文件,以防它被证明有帮助。
ios - 无法访问/导入在 iOS 11 文档浏览器中选择的 iCloud 文件的内容
除了打开和保存自己的自定义文档之外,我的基于 iOS 11 文档浏览器的应用程序应该能够导入适当格式的文本文件并将其转换为自己的文档。
但是,当在文档浏览器中选择文本文件时,只有当所选文件在本地存储中时,应用程序才能访问其内容(然后执行转换),但当文件存储在 iCloud 中时无法访问内容.
下面提供了我用于documentBrowser(_ controller: UIDocumentBrowserViewController, didPickDocumentURLs documentURLs: [URL])
委托方法的代码的简化注释版本:
info.plist 文件将自定义文档和 public.text 声明为文档类型(具有适当的角色和处理程序等级),并将自定义文档声明为导出的 UTI。如果选择的文件是自定义文档,则一切正常,无论文件是本地文件还是 iCloud 中。
由于文件在本地存储中时导入工作,我认为这可能是 iCloud 权限的问题,即使 Apple 文档的UIDocumentBrowserViewController
状态:
系统自动为您处理对 iCloud 的访问;您不需要启用应用程序的 iCloud 功能。
但是,尝试将 iCloud 功能添加到我的应用程序的权利并没有解决问题(实际上使情况变得更糟,因为现在完全相同的代码正在将新创建的文档保存在应用程序的默认 iCloud 容器中,这不是文档浏览器使用相同的 iCloud Drive 位置,以便所有文档对浏览器“不可见”-但我离题了...)。
另一个“有趣”的元素是我还在UIDocumentPickerViewController
应用程序中实现了一个将附加内容从文本文件导入到已经打开的自定义文档中。我使用的代码与上面的基本相同......并且它完美地工作,与文本文件是在本地存储还是在 iCloud 中无关!这可以强化这种观点,即问题与UIDocumentBrowserViewController
.
所以,总而言之:我可以做些什么来访问存储在 iCloud 中的文本文件的内容并将它们转换为我的应用程序的自定义文档?提前感谢您的任何建议(如果问题的表述有问题,请保持温和 - 这是我潜伏数月后的第一个 stackoverflow 问题!)。
ios - 文档从未出现在“最近”选项卡中
我有一个基于文档的 iOS 应用程序,它采用 iOS 11 的UIDocumentBrowserViewController
. 并且它声明了自己的文档类型,这是一个符合com.apple.package
.
(这是App Store 上的应用程序链接,包文件被称为“FlipBook”,它只是一个包含一系列图像的容器。)
我可以毫无问题地通过标准文档浏览器工作流程创建或编辑文档。但是,创建或编辑的文档都不会显示在文档浏览器的“最近”选项卡中 - 也不会出现在系统的 Files.app 中。
我尝试以多种方式调整 Info.plist 文件中的 UTI 设置,但没有一种方法起作用。我还尝试从 Xcode 模板(将 public.image 作为文档类型)创建一个新项目,但只要我声明了自己的文档类型,它就不再出现在“最近”选项卡中。我可以确认所有正在编辑的文档在文件浏览器中都显示了正确的修改日期——它只是从未出现过“最近”选项卡。
有人知道那里缺少什么吗?非常感谢。
ios - 关闭后 UIDocumentPickerViewController 错误
我正在使用 DocumentPickerViewController 在我的应用程序中导入文档。选择器可以正常工作,没有错误也没有崩溃,但是每次选择文档或取消视图控制器后,我都会收到带有以下错误的日志:
这是将显示选择器 VC 的函数:
这是委托扩展:
我也尝试使用UIDocumentBrowserViewController但我得到了相同的日志。我尝试的另一件事是启用 iCloud 权利,但没有任何变化。使用导航控制器并只需推动DocumentPicker 即可呈现相同的结果。我所做的每一个测试都是在真实设备和模拟器上构建的。
有什么我做错了吗?无论如何我可以摆脱显示的日志吗?
ios - 在启动时显示的 UIDocumentBrowserViewController 之前显示一个视图控制器
以下是事实:我有一个使用 iOS 11 的基于文档的应用程序UIDocumentBrowserViewController
。如文档中所述,我将其设置为我的根视图控制器:
始终将文档浏览器指定为应用的根视图控制器。不要将文档浏览器放置在导航控制器、标签栏或拆分视图中,也不要以模态方式呈现文档浏览器。
我在另一个视图控制器中有一个动画启动屏幕,在一个常用的应用程序中,它是根控制器。但是这里不能...
所以我的问题是我无法实现启动屏幕和动画启动视图控制器之间的平滑过渡。
viewWillAppear
我试图在浏览器视图控制器的和 中执行不带动画的segue viewDidLoad
...但是在启动屏幕和启动屏幕之间,我在浏览器上瞥见了一两秒...
我什至试图在内部的浏览器视图控制器上显示它,applicationDidFinishLaunching
但我得到了相同的结果......
因此,如果有人有一种干净的方法,我很感兴趣。如果您明白我的意思,我不希望通过在浏览器上插入野蛮的视图来结束。
提前致谢。
swift4 - iOS11 Swift 4:存储从 DocumentBrowserViewController 检索的 URL 的访问权限
用于从其他应用DocumentBrowserViewController
程序访问文件时,是否可以存储对这些文件的访问权限?
具体问题
目前,出于概念证明的目的,我将通过 选择的文件的 url 打印DocumentBrowserViewController
到控制台,在我的代码中的某处硬编码该 url,然后尝试再次打开该文件。这不起作用,因为:{Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"}}
现在,有没有办法存储访问权限?
在一篇博客文章中,我发现了一些使用:
但是withSecurityScope
“不可用”。(准确地说'withSecurityScope' has been explicitly marked unavailable here (Foundation.NSURL)
:)
有没有办法做这种事情?
预先问候和感谢:)
编辑
所以也许我这个问题有点草率,上面的代码只需要调整为:
然后可以像这样使用这些数据:
:)
ios - 如何分配模板文件的本地化名称?
我的 iOS 应用程序允许用户从选择模板文档开始。例如,在 Pages 中,您可以选择从“论文”模板开始。该模板文档被复制并打开。
我遇到了本地化问题,无法找到如何本地化生成的复制文件的显示名称。同样,以 Pages 为例。如果我的语言设置为法语并且我选择了“Reportage”(论文)模板,则复制的文件的名称为“Reportage”。
我的模板文件位于我的应用程序的捆绑资源中。我正在使用 UIDocumentBrowserViewController 和以下方法来创建文档
importHandler 最终用 .copy 调用,如下所示:
我的模板文件非常大,使用本地化名称发送副本是没有意义的。我们有一个解决方法,我们首先使用正确本地化的文件名创建一个副本。然后我们在 importHandler(url, .copy) 中使用生成的文件的 URL,但是必须复制文件两次似乎很浪费。
我在文档中看到了对localizedNameKey 的引用,但是关于如何设置该值的信息很少。假设它是相关的,我该如何使用localizedNameKey?是否有一些 plist 指定了每个文件的本地化信息?
swift - 保存和加载 UIDocumentBrowserViewController
我知道我可以使用下面的代码对我的文件进行编码/解码,以便从 UIDocumentBrowserViewController 在我的 UIDocument 中保存/加载,如 Apple 的 2017 WWDC 中所述。
但是,上面的代码对于更大的文件(300MB+)和更复杂的对象图来说效率很低,我的应用程序就是这种情况。
我想有必要实施某种增量储蓄。但是,我不知道如何实现这一点,也找不到关于该主题的任何教程或文档。另外, NSKeyedArchiver 似乎是一个缓慢的选择,所以我应该使用其他东西来进行增量保存吗?什么是实现保存/加载的好/快速方法?