Выбор песни и воспроизведение из библиотеки приложения «Музыка» — Swift 2.0

Я только что прошел базовый курс Swift 2.0. Я пытаюсь создать приложение для выбора песни из библиотеки музыкальных приложений iOS и воспроизведения ее. Я наткнулся на эту media_item_picker_and_media_item/" rel="nofollow noreferrer">ссылку, которая показывает, как сделать средство выбора медиафайлов .

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 строк показывает

Не удается присвоить значение типа ViewController типу MPMediaPickerControllerDelegate?

сообщение об ошибке. Когда я заблокировал его, приложение работает и позволяет мне отлично просматривать песни.

Вопрос 1: Я хотел бы знать, какая польза от этой линии?

Вопрос 2: Как воспроизвести песню, которую я выбрал, используя этот код?

Я искал здесь и на других сайтах, как играть песни. Я обнаружил, что люди используют player.play() для воспроизведения музыки. Я попробовал это и потерпел неудачу.


person jeyaganesh rajamanickam    schedule 31.03.2016    source источник
comment
Посмотрите на метод MPMediaPickerControllerDelegate. Вы поймете, почему вам нужно установить его в качестве делегата. Посмотрите, как использовать делегата в Swift, и поймите этот шаблон проектирования, который часто используется в Cocoa (Touch).   -  person Larme    schedule 31.03.2016


Ответы (1)


ViewController должен соответствовать «MPMediaPickerControllerDelegate»:

//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: {})
 }

Добавьте эти методы, чтобы соответствовать MPMediaPickerControllerDelegate:

 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")
 } 

Цель

'mediaPicker.delegate = self' 

заключается в настройке ViewController для реагирования на функции, добавленные выше. Если вы не установите делегата, mediaPicker все равно будет присутствовать, но ваш ViewController не будет знать, что пользователь совершил действие.

Всякий раз, когда вы устанавливаете делегат, убедитесь, что класс соответствует методам делегата. Если вы не знаете эти методы, выполните поиск этого делегата в документации Apple для разработчиков (т. е. выполните поиск «MPMediaPickerControllerDelegate»), и вы увидите все методы делегата, которые можно добавить.

person pj.self    schedule 27.07.2016
comment
Большое спасибо PJ G. Теперь я могу сыграть песню. У меня есть еще один вопрос. Как сохранить выбранную песню, чтобы я мог воспроизвести ее при открытии приложения в следующий раз, как в приложении будильника Apple и в мелодиях телефона? Заранее спасибо :) - person jeyaganesh rajamanickam; 11.08.2016
comment
@jeyaganeshrajamanickam Есть несколько способов сделать это. Обычно я сохраняю постоянный идентификатор в userDefaults. Затем при запуске (или где это имеет смысл) MPQuery песни пользователя и найти соответствующий MPMediaItem. Если вам нужны примеры кода, задайте вопрос, и я отвечу на него. Надеюсь, это поможет. - person pj.self; 18.10.2016