如何使用 SwiftUI DocumentGroup 读取大文件而不制作临时副本?

Posted

技术标签:

【中文标题】如何使用 SwiftUI DocumentGroup 读取大文件而不制作临时副本?【英文标题】:How to read large files using SwiftUI DocumentGroup without making a temporary copy? 【发布时间】:2021-05-23 12:31:20 【问题描述】:

我制作了一个 SwiftUI DocumentApp,它可以读取大型媒体文件,但不需要编写它们。在我的文档中,我只想存储文件的 URL,以便我可以使用例如加载它。 AV 音频文件。如果不创建文件的临时副本,我无法弄清楚如何做到这一点,就像作者所做的here一样,因为有no way to the file URL from the fileWrapper

我尝试使用 configuration.file.regularFileContents (Data) 创建一个管道,但到目前为止我没有成功读取该管道。

  init(configuration: ReadConfiguration) throws 
    let tempURL = makeTemporaryFileURL()
    FileManager.default.createFile(atPath: tempURL.path, contents: configuration.file.regularFileContents, attributes: nil)
    audioFileUrl = tempURL
  

【问题讨论】:

【参考方案1】:

可以通过文档配置获取fileURL,如

@main
struct MyApp: App 
    var body: some Scene 
        DocumentGroup(viewing: MyDocument.self)  fileConfig in
            // here fileConfig has `fileURL` of opened document, so 
            MyViewer(content: fileConfig.document, url: fileConfig.fileURL)
        
    

【讨论】:

以上是关于如何使用 SwiftUI DocumentGroup 读取大文件而不制作临时副本?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SwiftUI 呈现警报

如何使用 SwiftUI 在首次应用启动时启动教程?

如何使用 SwiftUI 获取当前位置?

如何使用 SwiftUI 将数组绑定到列表

SwiftUI:如何使用 UserDefaults 保存选择器数据?

如何使用 SwiftUI 沿圆形路径绘制文本