首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mac催化剂的UIDocumentPickerViewController配置

Mac催化剂的UIDocumentPickerViewController配置
EN

Stack Overflow用户
提问于 2021-06-28 10:44:11
回答 1查看 209关注 0票数 0

当使用UIDocumentPickerViewController时,是否需要额外的功能、权限或沙箱配置?我错过了警告吗?

使用催化剂在macOS (11.4)上运行以下代码,在选择文件时永远不会调用didPickDocumentsAt:委托函数。但是,如果选择器被拒绝或尝试打开文件,则会调用documentPickerWasCancelled

我最初怀疑由于SwiftUI的View娱乐而导致的不正确的内容类型或委托取消分配,但由于as cancel被调用,我怀疑没有。

确定的一个警告是,asCopy在为macOS配置UIDocumentPickerViewController时必须是macOS,而为iOS配置true时必须是true

此错误指示沙盒权限错误:

DocumentPickerSwiftUI[42570:1472986] Failed to create an FPSandboxingURLWrapper for file:///Users/ed/test_file.txt. Error: Error Domain=NSPOSIXErrorDomain Code=1 "couldn't issue sandbox extension com.apple.app-sandbox.read-write for '/Users/ed/test_file.txt': Operation not permitted" UserInfo={NSDescription=couldn't issue sandbox extension com.apple.app-sandbox.read-write for '/Users/ed/test_file.txt': Operation not permitted}

当前功能配置(用户选择的文件的只读访问):

代码语言:javascript
复制
import SwiftUI
import UIKit
import UniformTypeIdentifiers

struct ContentView: View {
    @State var showDocumentPicker: Bool = false

    var body: some View {
        documentPickerButton
    }

    private var documentPickerButton: some View {
        Button(action: {
            showDocumentPicker.toggle()
        }, label: {
            Text("Open")
        })
        .sheet(isPresented: self.$showDocumentPicker) {
            AudioFilePicker()
        }
    }
}

final class AudioFilePicker: UIViewControllerRepresentable {

    var viewController = UIDocumentPickerViewController(forOpeningContentTypes: [.item], asCopy: false)

    class Coordinator: NSObject, UIDocumentPickerDelegate {

        var parent: AudioFilePicker

        init(parent: AudioFilePicker) {
            self.parent = parent
        }

        func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
            print("Picker Loaded: \(String(describing: urls.first?.absoluteString))")
            // Do something with URL (never called)
        }

        func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) {
            print("Picker Cancelled")
        }
    }

    func makeCoordinator() -> Coordinator {
        return Coordinator(parent: self)
    }

    func makeUIViewController(context: Context) -> UIDocumentPickerViewController {
        viewController.delegate = context.coordinator
        return viewController
    }

    func updateUIViewController(_ uiViewController: UIDocumentPickerViewController, context: Context) { }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-28 10:55:12

此错误表示权限错误。试着添加:

代码语言:javascript
复制
<key>com.apple.security.files.user-selected.read-write</key>
<true/>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68161958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档