>source

iOS 앱용 문서 선택기를 만들려고합니다.

내 코드는 다음과 같습니다 (UIViewControllerRepresentable로 SwiftUI View에서 UIDocumentPickerViewController를 래핑했습니다).

import SwiftUI
import MobileCoreServices
struct DocumentPickerViewController: UIViewControllerRepresentable {
    var callback: (Data) -> ()
    func makeCoordinator() -> Coordinator {
        return Coordinator(documentController: self)
    }
    func updateUIViewController(
        _ uiViewController: UIDocumentPickerViewController,
        context: UIViewControllerRepresentableContext<DocumentPickerViewController>) {
    }
    func makeUIViewController(context: Context) -> UIDocumentPickerViewController {
        let controller = UIDocumentPickerViewController(documentTypes: [String(kUTTypePDF)], in: .open)
        controller.delegate = context.coordinator
        return controller
    }
    class Coordinator: NSObject, UIDocumentPickerDelegate {
        var documentController: DocumentPickerViewController
        init(documentController: DocumentPickerViewController) {
            self.documentController = documentController
        }
        func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
            guard let url = urls.first else { return }
            let fileManager = FileManager.default
            print(fileManager.fileExists(atPath: url.path))
            let data = NSData(contentsOfFile: url.path)
            let file = UploadFileData(fileName: "\(url)", fileType: .file, fileData: data!)
            let dataFile = file.fileData as Data
            
            documentController.callback(dataFile)
        }
    }
}
enum UploadFileType{
    case photo
    case file
}
struct UploadFileData {
    var fileName: String
    var fileType: UploadFileType
    var fileData: NSData
}
var file: UploadFileData?

내 시뮬레이터에서 작동하지만 실제 장치에서 PDF를 선택하면 다음 오류가 발생합니다. 치명적인 오류 : 옵션 값을 언 래핑하는 동안 예기치 않게 nil이 발견되었습니다 : file MyApp/DocumentPickerViewController.swift, line 44

즉, 라인 : let dataFile = file.fileData as Data


  • 답변 # 1

    문제는 문서 선택기에서 사용하는 파일 전송 작업 유형을 정의 할 때 잘못된 모드를 사용하고 있다는 것입니다. .open 앱의 샌드 박스 외부에있는 외부 파일을 여는 데 사용됩니다. 필요한 것은 사용하는 것입니다 .import 내용을로드하거나 파일을 영구적 인 위치로 이동/복사 할 수있는 임시 파일을 생성합니다. 문제가 해결되지 않으면 DocumentPickerViewController 코디네이터를 구현하는 방법에 대한이 게시물을 확인하십시오.

    let controller = UIDocumentPickerViewController(documentTypes: [String(kUTTypePDF)], in: .import)
    
    

  • 이전 asp.net core - 가짜 인스턴스를 등록하고 등록 반환을 선언 할 수 있습니까?
  • 다음 python - pytorch autograd - 사용자 정의 함수 그라디언트의 차원?