user12782772
user12782772

Reputation: 53

Swift Document Picker, can not reach the file

I am writing a project which involves picking a file and getting the content of the file. However, I think it is not reaching the correct url of the file.

Here is the function where it calls the document picker. It is activated by a button.

@IBAction func selectFile(_ sender: Any) {
        let documentPicker = UIDocumentPickerViewController(documentTypes: [kUTTypePlainText as String], in: .import)
        documentPicker.delegate = self
        documentPicker.allowsMultipleSelection = false
        present(documentPicker, animated: true, completion: nil)
}

And here is the extension to UIDocumentPickerViewController

extension ViewController: UIDocumentPickerDelegate {
    func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
        print(urls)
        do {
            let fileContent = try String(contentsOf: urls[0], encoding: .utf8)
            print(fileContent)
        } catch {
            return
        }
    }
}

In the console output, fileContent is not being printed out, instead, here is what it prints out.

Failed to associate thumbnails for picked URL
file:///Users/<user>/Library/Developer/CoreSimulator/Devices/480A2D02-810F-435E-BF44-4B2F6FC614A9/data/Containers/Data/Application/BAA825D0-C4D8-4B33-AFB3-3737ADCA0B29/Documents/test2.txt with the Inbox copy 
file:///Users/<user>/Library/Developer/CoreSimulator/Devices/480A2D02-810F-435E-BF44-4B2F6FC614A9/data/Containers/Data/Application/BAA825D0-C4D8-4B33-AFB3-3737ADCA0B29/tmp/<project>-Inbox/test2.txt: 
Error Domain=QLThumbnailErrorDomain Code=102 "(null)" 
UserInfo={NSUnderlyingError=0x600003348060 
{Error Domain=GSLibraryErrorDomain Code=3 "Generation not found" UserInfo={NSDescription=Generation not found}}}

There aren't many resources about this online, can someone help look at what I did wrong here?

Upvotes: 5

Views: 3409

Answers (3)

Mehmet Karanlık
Mehmet Karanlık

Reputation: 277

File urls different because its like it said its importing to applications temp files if you choose .import. To get orginal file url you should choose .open

Upvotes: -1

Lito
Lito

Reputation: 2328

I know this is an old question, but if it is of help to anyone, I fixed the console issue by changing the instance type of UIDocumentPickerViewController, entering .open instead of .import

In my case, the behaviour does not change and I can choose a file without losing the expected behaviour.

Upvotes: 3

Joseph
Joseph

Reputation: 99

Actually I made a small change on the UIDocumentPickerViewController initialiser. Adding the updated code below.

@IBAction func selectFile(_ sender: Any) {
    let documentPicker = UIDocumentPickerViewController(documentTypes: ["public.text"], in: .import)
    documentPicker.delegate = self
    documentPicker.allowsMultipleSelection = false
    present(documentPicker, animated: true, completion: nil) }

Rest of the code same, only replaced this ["public.text"] instead of [kUTTypePlainText as String].

May be it resolves your problem. Please let me know the feedback. Credit gose to adrian check this link using-uidocumentpickerviewcontroller-to-import-text-in-swift

Upvotes: 2

Related Questions