質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

2246閲覧

MPMediaPickerControllerについて

Shouka

総合スコア34

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/08/19 07:05

編集2019/08/19 07:46

とりあえず曲を選択して流せるiosアプリを作りたくて、こちらのサイトを参考にプログラムを組んでいました。
今のSwiftの形式になるように書き直し、エラーは何も出ていないのですが、実機でシュミレートした時に「選択」を押しても画面が真っ白になるだけで困っています…。

Swift

1 @IBAction func SelectMusic(_ sender: Any) { 2 //MPMediaPickerControllerのインスタンスを作成 3 let picker = MPMediaPickerController() 4 // ピッカーのデリゲートを設定 5 picker.delegate = self 6 // 複数選択にする。(falseにすると、単数選択になる) 7 picker.allowsPickingMultipleItems = true 8 // ピッカーを表示する 9 present(picker, animated: true, completion: nil) 10 }

ここでちゃんとピッカーを表示にしていると思うのですが…真っ白で、バツボタンも何も表示されずそっから動かない、って感じになります。
プログラムの全文はこちらです。

Swift

1import UIKit 2import MediaPlayer 3 4class ViewController: UIViewController, MPMediaPickerControllerDelegate { 5 6 @IBOutlet weak var Photo: UIImageView! 7 @IBOutlet weak var Artist: UILabel! 8 @IBOutlet weak var Album: UILabel! 9 @IBOutlet weak var Music: UILabel! 10 11 //MediaPlayerのインスタンスを作成 12 var player:MPMusicPlayerController! 13 14 15 override func viewDidLoad() { 16 super.viewDidLoad() 17 // Do any additional setup after loading the view. 18 player = MPMusicPlayerController.applicationMusicPlayer 19 // 再生中のItemが変わった時に通知を受け取る 20 //let notificationCenter = NotificationCenter.default 21 //notificationCenter.addObserver(self, selector: #selector(ViewController.nowPlayingItemChanged(_:)), name: MPMusicPlayerControllerNowPlayingItemDidChangeNotification, object: player) 22 // 通知の有効化 23 player.beginGeneratingPlaybackNotifications() 24 } 25 26 override func didReceiveMemoryWarning() { 27 super.didReceiveMemoryWarning() 28 // Dispose of any resources that can be recreated. 29 } 30 31 @IBAction func SelectMusic(_ sender: Any) { 32 //MPMediaPickerControllerのインスタンスを作成 33 let picker = MPMediaPickerController() 34 // ピッカーのデリゲートを設定 35 picker.delegate = self 36 // 複数選択にする。(falseにすると、単数選択になる) 37 picker.allowsPickingMultipleItems = true 38 // ピッカーを表示する 39 present(picker, animated: true, completion: nil) 40 } 41 /// メディアアイテムピッカーでアイテムを選択完了したときに呼び出される 42 func mediaPicker(mediaPicker: MPMediaPickerController, didPickMediaItems mediaItemCollection: MPMediaItemCollection) { 43 44 // プレイヤーを止める 45 player.stop() 46 47 // 選択した曲情報がmediaItemCollectionに入っているので、これをplayerにセット。 48 player.setQueue(with: mediaItemCollection) 49 50 // 選択した曲から最初の曲の情報を表示 51 if let mediaItem = mediaItemCollection.items.first { 52 updateSongInformationUI(mediaItem: mediaItem) 53 } 54 55 // ピッカーを閉じ、破棄する 56 dismiss(animated: true, completion: nil) 57 58 } 59 60 61 /// 選択がキャンセルされた場合に呼ばれる 62 func mediaPickerDidCancel(mediaPicker: MPMediaPickerController) { 63 // ピッカーを閉じ、破棄する 64 dismiss(animated: true, completion: nil) 65 } 66 67 /// 曲情報を表示する 68 func updateSongInformationUI(mediaItem: MPMediaItem) { 69 70 // 曲情報表示 71 // (a ?? b は、a != nil ? a! : b を示す演算子です) 72 // (aがnilの場合にはbとなります) 73 Artist.text = mediaItem.artist ?? "不明なアーティスト" 74 Album.text = mediaItem.albumTitle ?? "不明なアルバム" 75 Music.text = mediaItem.title ?? "不明な曲" 76 77 // アートワーク表示 78 if let artwork = mediaItem.artwork { 79 let image = artwork.image(at: Photo.bounds.size) 80 Photo.image = image 81 } else { 82 // アートワークがないとき 83 // (今回は灰色表示としました) 84 Photo.image = nil 85 Photo.backgroundColor = UIColor.gray 86 } 87 88 } 89 90 @IBAction func Play(_ sender: Any) { 91 player.play() 92 } 93 @IBAction func Pause(_ sender: Any) { 94 player.pause() 95 } 96 @IBAction func Stop(_ sender: Any) { 97 player.stop() 98 } 99 100 /// 再生中の曲が変更になったときに呼ばれる 101 func nowPlayingItemChanged(notification: NSNotification) { 102 103 if let mediaItem = player.nowPlayingItem { 104 updateSongInformationUI(mediaItem: mediaItem) 105 } 106 } 107 108 deinit { 109 // 再生中アイテム変更に対する監視をはずす 110 let notificationCenter = NotificationCenter.default 111 notificationCenter.removeObserver(self, name: NSNotification.Name.MPMusicPlayerControllerNowPlayingItemDidChange, object: player) 112 // ミュージックプレーヤー通知の無効化 113 player.endGeneratingPlaybackNotifications() 114 } 115}

エラーが出てないだけにどうしらた良いかわからず、またピッカーが表示されないと検索しても解決策がヒットせず困っています。どなたかよろしくお願いします…!

この方と一緒の状況だと思ったのですが、解決方法の書く場所がわからなかったです。
またInfo.plistに何か追加するという方法もよく見たのですが、Info.plistが3つあってどこに追加したら良いかもわからなかったです。とりあえず下画像のように突っ込んでみたのですが状況は変わりませんでした……
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

イメージ説明
ここに追加でした!すみませんでした!

投稿2019/08/19 07:53

Shouka

総合スコア34

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問