如何在 iOS 中使用 Swift/SwiftUI 将我从应用数据导出的文本文件移动到应用沙箱之外的位置?

Posted

技术标签:

【中文标题】如何在 iOS 中使用 Swift/SwiftUI 将我从应用数据导出的文本文件移动到应用沙箱之外的位置?【英文标题】:How do I move a text file I exported from app data to a place outside the app's sandbox using Swift/SwiftUI in iOS? 【发布时间】:2020-02-23 11:18:04 【问题描述】:

我有一个通常为用户存储数据的应用。一切正常,但我想让用户有机会将数据导出到 CSV 并按照他们的意愿进行操作。

现在,我有 CSV,但它们位于应用程序的沙箱内,对用户来说非常困难且不友好。如何将这些移动到应用程序沙箱之外的位置,移动到用户更熟悉的位置,例如 iCloud 中的 Documents 文件夹或 Downloads 文件夹?

SwiftUI 解决方案会很棒,但 Swift 也可以!

因为我完全被难住了,所以我没有代码可以显示。

【问题讨论】:

没有 SwiftUI 组件。您可以使用UIDocumentPickerViewController 的实例让用户将文件导出到方便的地方,例如文件应用程序或Dropbox 等云存储位置。 @Paulw11 好的,我可以用可表示的形式包装 UIDocumentPickerViewController。谢谢!顺便说一句……你照片中的 Tandy Model 2 是吗? 【参考方案1】:

感谢@Paulw11 的指导!我很不确定如何去做,但它非常简单!

在创建导出文件时,我将 URL 保存到一个数组中。然后我将它们传递给我使用 UIDocumentPickerViewController 实现的 UIViewControllerRepresentable (用于 SwiftUI)的结构。

结构如下所示:

import SwiftUI
import UIKit

struct DocumentPicker: UIViewControllerRepresentable 
    var URLs: [URL]
    func makeUIViewController(context: UIViewControllerRepresentableContext<DocumentPicker>) ->
        UIDocumentPickerViewController 

        let picker = UIDocumentPickerViewController(urls: URLs, in: .moveToService)
        return picker


    func updateUIViewController(_ uiViewController: UIDocumentPickerViewController, context: UIViewControllerRepresentableContext<DocumentPicker>)

您最终将所有文件都准备好移动到用户选择的位置:

【讨论】:

以上是关于如何在 iOS 中使用 Swift/SwiftUI 将我从应用数据导出的文本文件移动到应用沙箱之外的位置?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Swift 5 /SwiftUI 将 AVAudioRecorder 文件上传到 Firebase 存储?

如何构造值以使所有视图都可以在 Swift/SwiftUI 中访问其值?

如何使用 Swift/SwiftUI 从 ImagePicker 获取选定的图像文件名

如何在swift / SwiftUI中为滑动手势设置菜单栏图标的操作

如何让 TextField 值更改触发 SwiftUI 中另一条数据的更新?

在 Swift + SwiftUI 中处理错误的好习惯