0

В своем стремлении ответить на этот вопрос я натолкнулся на это в книге.Как получить медиатеку из коллекции 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 к переменной обр. Использование songURL и MediaItemCollection находится внутри функции picker mediaPicker. Я не могу получить доступ к нему за пределами его функции. Как мне заставить это работать?

ответ

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 вне функции.