2016-03-31 6 views
1

Ich habe gerade einen einfachen Kurs von Swift 2.0 genommen. Ich versuche eine App zu erstellen, um einen Song aus der Music App-Bibliothek von iOS auszuwählen und abzuspielen. Ich bin auf diese link gestoßen, die zeigt, wie man Media Item Picker macht.Einen Song auswählen und aus der Musik-App-Bibliothek abspielen - Swift 2.0

import UIKit 
import MediaPlayer 

class ViewController: UIViewController { 

@IBOutlet weak var pickSong: UIButton! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    let mediaPicker = MPMediaPickerController(mediaTypes: .Music) 

    // mediaPicker.delegate = self 
    // mediaPicker.prompt = "Select song (Icloud songs must be downloaded to use)" 
    mediaPicker.allowsPickingMultipleItems = false 
    mediaPicker.showsCloudItems = false 
    presentViewController(mediaPicker, animated: true, completion: {}) 
} 

mediaPicker.delegate = self Linie zeigt

Wert kann nicht vom Typ zuweisen 'Viewcontroller' eingeben 'MPMediaPickerControllerDelegate?'

Fehlermeldung. Wenn ich es blockierte, funktioniert die App und erlaubt mir, Songs perfekt zu durchsuchen.

Frage 1: Ich würde gerne wissen, was ist die Verwendung dieser Linie?

Frage 2: Wie spiele ich einen Song, den ich mit diesem Code ausgewählt habe?

Ich suchte hier und anderen Websites nach, wie man Lieder spielt. Ich fand Leute, die player.play() verwenden, um Musik zu spielen. Ich habe es versucht und ist gescheitert.

+0

Schauen Sie sich die Methode von 'MPMediaPickerControllerDelegate' an. Sie werden verstehen, warum Sie es als Delegierten festlegen müssen. Schau, wie man Delegat in Swift verwendet und verstehe, dass Design-Muster, das viel in Cocoa verwendet wird (Touch) – Larme

Antwort

5

Viewcontroller muss der 'MPMediaPickerControllerDelegate' entsprechen:

//Let other classes know ViewController is a MPMediaPickerControllerDelegate 
class ViewController: UIViewController, MPMediaPickerControllerDelegate { 

    override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    let mediaPicker = MPMediaPickerController(mediaTypes: .Music) 
    mediaPicker.delegate = self 
    presentViewController(mediaPicker, animated: true, completion: {}) 
} 

Fügen Sie diese Methoden zu MPMediaPickerControllerDelegate anzupassen:

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

    //User selected a/an item(s). 
    for mpMediaItem in mediaItemCollection.items { 
     print("Add \(mpMediaItem) to a playlist, prep the player, etc.") 
    } 
} 

func mediaPickerDidCancel(mediaPicker: MPMediaPickerController) { 
    print("User selected Cancel tell me what to do") 
} 

Der Zweck

'mediaPicker.delegate = self' 

ist die Einrichtung Viewcontroller um auf die oben hinzugefügten Funktionen zu antworten. Wenn Sie den Delegierten nicht festlegen, wird der mediaPicker weiterhin angezeigt, aber Ihr ViewController weiß nicht, dass der Benutzer eine Aktion ausgeführt hat.

Wenn Sie einen Delegaten festlegen, müssen Sie sicherstellen, dass die Klasse den Delegatmethoden entspricht. Wenn Sie die Methoden nicht kennen, suchen Sie in den Developer-Dokumenten von Apple nach diesem Delegaten (dh suchen Sie nach 'MPMediaPickerControllerDelegate') und Sie sehen alle Delegate-Methoden, die Sie hinzufügen können.

+0

Vielen Dank PJ G. Jetzt kann ich ein Lied spielen. Ich habe eine andere Frage. Wie speicher ich das ausgewählte Lied, damit ich es beim nächsten Öffnen der App beim nächsten Mal abspielen kann wie in Apples Alarm-App und Handy-Klingeltönen? Vielen Dank im Voraus :) –

+0

@jeyaganeshrajamanickam Es gibt ein paar Möglichkeiten, wie Sie es tun könnten. Normalerweise speichere ich die persistente ID in userDefaults. Dann beim Start (oder wo auch immer sinnvoll) MPQuery die Lieder des Benutzers und finde das passende MPMediaItem. Wenn Sie Codebeispiele haben möchten, stellen Sie eine Frage und ich werde sie beantworten. Ich hoffe, das hilft. –