Как мне получить mediaItemCollection из mediaPickerController для воспроизведения на AVPlayer?

В своем стремлении ответить на этот вопрос я наткнулся на это в книге.

"MPMediaItem, однако, имеет ключ MPMediaItemPropertyAssetURL (или свойство assetURL), значением которого является URL-адрес. Это дает вам ссылку на музыкальный файл на диске,... получив URL-адрес ресурса MPMediaItem, вы можете использовать этот URL-адрес для инициализации AVAudioPlayer, AVPlayer или AVAsset."

Поэтому я попытался использовать mediaPickerController, чтобы получить URL ресурса, подобный этому.

    func mediaPicker(mediaPicker: MPMediaPickerController, didPickMediaItems mediaItemCollection: MPMediaItemCollection) {

    guard let mediaItem = mediaItemCollection.items.first else {
        NSLog("No item selected.")
        return
    }
    var songURL = mediaItem.valueForProperty(MPMediaItemPropertyAssetURL) as! NSURL
    print(songURL)
    self.dismissViewControllerAnimated(true, completion: nil)
}

В книге это приводит в качестве примера:

let arr = // array of MPMediaItem
let items = arr.map {
    let url = $0.assetURL!
    let asset = AVAsset(URL:url)
    return AVPlayerItem(asset: asset)
}
self.qp = AVQueuePlayer(items:items)
self.qp.play()

Я не уверен, как получить mediaItemCollection в переменную arr. Использование songURL и MediaItemCollection находятся внутри функции медиапикера выбора. Я не могу получить к нему доступ за пределами его функции. Как мне заставить это работать?

1 ответ

Решение

ХОРОШО. Я понял это.

Решение состоит в том, чтобы сначала объявить переменную вне функции, но под классом. Я просто создал это так:

class ViewController: UIViewController, MPMediaPickerControllerDelegate {

var songUrl: NSURL = NSURL()
var player = AVPlayer()


func mediaPicker(mediaPicker: MPMediaPickerController, didPickMediaItems mediaItemCollection: MPMediaItemCollection) {

    guard let mediaItem = mediaItemCollection.items.first else {
        NSLog("No item selected.")
        return
    }
    songUrl = mediaItem.valueForProperty(MPMediaItemPropertyAssetURL) as! NSURL
    print(songUrl)

    self.dismissViewControllerAnimated(true, completion: nil)
}

Теперь я могу получить доступ к songUrl вне функции.