71957


Swiftでファイル選択画面のUIを表示したいと思っています。  
UIDocumentPickerViewControllerというのを使えばそれらしきことが出来るのではないかと思い、私は以下の記事を参考にして、コードを作成しました。

UIDocumentPickerViewControllerで選択ファイルを絞る & iOS14からのUTType  
<https://qiita.com/mittsu/items/5e027f4cb62719abba72>

以下のコードをiOS14で実行しましたが、ファイル選択の画面が表示されませんでした。  
私のコードはどこが間違っていますか？

[code]

    import UIKit
    import Foundation
    
    import UniformTypeIdentifiers
    import MobileCoreServices
    
    class ViewController: UIViewController {
        
        override func viewDidLoad() {
            super.viewDidLoad()
            
        }
        
        @IBAction func fileSelectButtonTapped(_ sender: Any) {
            if #available(iOS 14.0, *)
            {
                let picker = UIDocumentPickerViewController(
                    forOpeningContentTypes: [
                        UTType.mpeg4Audio,
                        UTType.mp3
                    ],
                    asCopy: true)
                picker.delegate = self
                self.navigationController?.present(picker, animated: true, completion: nil)
            }
            else
            {
                let picker = UIDocumentPickerViewController(
                    documentTypes: [
                        String(kUTTypeMPEG4Audio),
                        String(kUTTypeMP3)
                    ],
                    in: .import)
                picker.delegate = self
                self.navigationController?.present(picker, animated: true, completion: nil)
            }
        }
        
        
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
        }
    }
    extension ViewController: UIDocumentPickerDelegate {
    
        func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
    
            if let filePath = urls.first?.description {
                print("filepath:\(filePath)")
            }
        }
    
        func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) {
            print("cancel")
        }
    }
    
[/code]

XCodeから、Signing & Capabilitiesから、iCloudを追加し、Key-value storageをチェックしています。  
また、Keychain Stringも追加しています。

[![画像の説明をここに入力](https://i.stack.imgur.com/bhy7p.png)](https://i.stack.imgur.com/bhy7p.png)

XCodeのバージョンはVersion 12.1 (12A7403)を使用しています。


CC BY-SA 4.0
2020-11-14T23:05:05.550
71956
2020-11-15T00:40:51.097
36446
question
swift
UIDocumentPickerViewControllerが開かない


Storyboad上などで、navigation
controllerを使用していなかったため、`self.navigationController?.present(picker, animated:
true, completion: nil)`ではうまくいかなかったようです。

`self.present(picker, animated: true, completion: nil)`に変更すると開くようになりました。

[code]

    @IBAction func fileSelectButtonTapped(_ sender: Any) {
        if #available(iOS 14.0, *)
        {
            let picker = UIDocumentPickerViewController(
                forOpeningContentTypes: [
                    UTType.mpeg4Audio,
                    UTType.mp3
                ],
                asCopy: true)
            picker.delegate = self
            self.present(picker, animated: true, completion: nil)
        }
        else
        {
            let picker = UIDocumentPickerViewController(
                documentTypes: [
                    String(kUTTypeMPEG4Audio),
                    String(kUTTypeMP3)
                ],
                in: .import)
            picker.delegate = self
            self.present(picker, animated: true, completion: nil)
        }
    }
    
[/code]


CC BY-SA 4.0
2020-11-15T00:40:51.097
71957
2020-11-15T00:40:51.097
36446
71956
answer