0

爲了回答這個問題,我在一本書中遇到了這個問題。如何從mediaPickerController獲取mediaItemCollection以在AVPlayer上播放?

「MPMediaItem,然而,有一個MPMediaItemPropertyAssetURL鍵(或assetURL屬性),它的值是一個URL。這讓你到磁盤上的音樂文件的引用,...已經獲得了MPMediaItem的資產URL,你可以使用初始化AVAudioPlayer,AVPlayer或AVAsset的URL。「

所以我試圖使用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的使用在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。