0

У меня есть два контроллера вида, один с медиаплеер и один с фактическим игроком. так я сделал этот код:SWIFT - MPMediaPickerController -init error

первый взгляд

import UIKit 
import MediaPlayer 

class WelcomeView: UIViewController, MPMediaPickerControllerDelegate { 

override func viewDidLoad() { 
super.viewDidLoad() 
var mediaPicker: MPMediaPickerController = MPMediaPickerController.self(mediaTypes:MPMediaType.Music) 
mediaPicker.allowsPickingMultipleItems = false 
mediapicker1 = mediaPicker 
mediaPicker.delegate = self 
} 

override func didReceiveMemoryWarning() { 
super.didReceiveMemoryWarning() } 

var mediapicker1 = MPMediaPickerController() 

@IBAction func selectsong(sender: AnyObject) { 
self.presentViewController(mediapicker1, animated: true, completion: nil) 
} 

func mediaPicker(mediaPicker: MPMediaPickerController!, didPickMediaItems mediaItemCollection: MPMediaItemCollection!) { 
    self.dismissViewControllerAnimated(true, completion: nil) 
    println("you picked: \(mediaItemCollection)") 
    selectedelement = mediaItemCollection 

    let vc = MainView(nibName: "MainView", bundle: nil) 
    navigationController?.pushViewController(vc, animated: true) 
} 

var selectedelement = MPMediaItemCollection() 
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    var DestView: MainView = segue.destinationViewController as MainView 
    DestView.selectedsong = selectedelement 
}} 

и вид игрока

import UIKit 
import MediaPlayer 

class MainView: UIViewController { 

var play = MPMusicPlayerController() 
var selectedsong = MPMediaItemCollection() 

override func viewDidLoad() { 
super.viewDidLoad() 

    func prepareToPlay() -> Bool{ 
    let myplayer = MPMusicPlayerController.applicationMusicPlayer() 
    myplayer.setQueueWithItemCollection(selectedsong) 
    play = myplayer 
    myplayer.play() 
    return true 
    }} 

override func didReceiveMemoryWarning() { 
super.didReceiveMemoryWarning() 
}} 

, но когда я нажимаю начать Xcode дает мне эту ошибку: «MPMediaItemCollectionInitException», причина: '-init не поддерживается, используйте -initWithItems: «

Я искал в google об этом и нашел что-то вроде« Я не действую союзница выполнение запроса в фоновом режиме»

поэтому я не действительно понимаю, что делать))

ответ

0

Проблемы в том, что вы инициализацию переменных вместо того, чтобы просто объявить их и ваш выбор инициализатора не является действительным.

var selectedsong = MPMediaItemCollection() 
//  missing "items:" in constructor^

Поскольку вы устанавливаете selectedsong в вашем prepareForSegue любом случае, вы должны просто объявить его и не пытаться инициализировать значение:

var selectedsong : MPMediaItemCollection 

Side Примечание: То же самое относится и к play , Вы сбрасываете его значение в prepareToPlay, прежде чем использовать его в первый раз, поэтому это начальное значение выбрасывается каждый раз в любом случае.

var play : MPMusicPlayerController