问题描述
我正在尝试使用文件浏览器将 mp3 文件从应用程序的沙箱外部导入到我的应用程序中。我有一个“存储”环境对象,其中包含要将所选文件移动到的文件夹 URL。我想将该存储作为环境对象添加到文件选择器中。
struct libraryView: View {
@State var filePicker : DocumentPicker
@EnvironmentObject var store : MusicStore
@State var showPicker = false
func presentDocumentPicker() {
let viewController = UIApplication.shared.windows[0].rootViewController!
let controller = filePicker.viewController
viewController.present(controller,animated: true)
}
var body: some View {
Button(action: {showPicker = true
presentDocumentPicker()
},label: {
Image(systemName: "plus").imageScale(.large)
})
}}
这里是文档选择器代码:
final class DocumentPicker: NSObject,ObservableObject {
@EnvironmentObject var store : MusicStore
lazy var viewController: UIDocumentPickerViewController = {
let vc = UIDocumentPickerViewController(documentTypes: types,in: .import)
vc.delegate = self
vc.allowsMultipleSelection = self.allowsMultipleSelection
return vc
}()
}
extension DocumentPicker: UIDocumentPickerDelegate {
func documentPicker(_ controller: UIDocumentPickerViewController,didPickDocumentsAt urls: [URL]) {
callback(urls)
do {
let filePath = try FileManager.default.contentsOfDirectory(at: url.deletingLastPathComponent(),includingPropertiesForKeys: nil,options: [])[0]
let audioFile = try Data(contentsOf: filePath)
// let destinationURL = store.folderURL!.appendingPathComponent(filePath.lastPathComponent)
// try FileManager.default.moveItem(at: filePath,to: destinationURL)
// print("File moved to documents folder")
}
catch {
print(error)
}
}
}
这是商店代码:
class MusicStore : ObservableObject {
var folderURL : URL?
init(){
do{
self.folderURL = try FileManager.default.url(
for: .documentDirectory,in: .userDomainMask,appropriateFor: nil,create: false
)} catch(let error) {
print(error.localizedDescription)
}
}
所以我想将文件导入到我的应用程序沙箱中的 documentPicker 函数中,就像在注释代码中一样。但是我无法向视图控制器添加环境对象。我不知道是否可以这样做,因为我正在使用根视图控制器来显示文档选择器。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)