如何使用Swift 3 iOS10为使用MPMediaPickerControllerDelegate的View Controller呈现音乐库?

问题描述:

我正在尝试关注使用MPMediaPickerControllerDelegate呈现音乐选择列表的最新帖子。如何使用Swift 3 iOS10为使用MPMediaPickerControllerDelegate的View Controller呈现音乐库?

http://www.justindoan.com/tutorials/

我使用这个代码:

import UIKit 
import MediaPlayer 

class ViewController: UIViewController, MPMediaPickerControllerDelegate { 

    var mediapicker1: MPMediaPickerController! 

    override func viewDidLoad() { 
     super.viewDidLoad() 


     let mediaPicker: MPMediaPickerController = MPMediaPickerController.self(mediaTypes:MPMediaType.music) 
     mediaPicker.allowsPickingMultipleItems = false 
     mediapicker1 = mediaPicker 
     mediaPicker.delegate = self 
     self.presentViewController(mediapicker1, animated: true, completion: nil) 
     } 
} 

不过,我发现,:

self.presentViewController(mediapicker1, animated: true, completion: nil) 

本教程在这个网址找到工作。不幸的是,斯威夫特3所建议的自动化解决方案不起作用或者:

self.present(mediapicker1, animated: true, completion: nil) 

此外,iOS的10 Beta版发行说明,在发现:

https://www.scribd.com/doc/315770725/IOS-10-Beta-Release-Notes

说18 10的页面上,

MPMediaPickerController对象可能无法正常显示。

我花了很多时间寻找解决这个问题,我自己没有成功。

有什么建议吗?

+0

您的链接是测试版文档的镜像。您应该始终使用Apple的官方文档。 iOS 10已经发布并且没有测试版。 – JAL

+0

@George Lee,我最近在[appstore]上发布了一个应用程序(https://itunes.apple.com/in/app/playmates./id1156484061?mt=8),该应用程序为MPMediaPickerControllerDelegate提供了带有视图控制器的音乐库使用Swift 3.检查你是否有相同的需求,然后我可以帮你详细(代码也是如此) – pkc456

+0

@ pkc456那会很好。你能分享这篇文章的代码吗? –

经过的步骤:

  1. 增加 'NSAppleMusicUsageDescription' 到您的Info.plist的隐私权限。
  2. 确保您的iPhone音乐应用程序可用。它不会在模拟器中工作。
+0

问题中的代码正确运行时,plist键'NSAppleMusicUsageDescription'不是必需的。 – JAL

+2

@JAL在新的iOS10中,它会出现一个空白的视图。经过iPhone6 Plus,iOS10测试。 –

+0

这个答案是正确的。在info.plist中添加NSAppleMusicUsageDescription确实允许MPMediaPickerDelegate显示音乐列表。它会带来一个隐私 - 媒体库使用类型:字符串,值:是的。 –

根据我们对评论的讨论,我最近在我的最新应用named playmates中使用了MPMediaPickerController。我正在与你分享工作代码。我写了不言自明的代码。

import MediaPlayer 

class viewControllerName: UIViewController,MPMediaPickerControllerDelegate { 

//Below is Inaction for picking music from media library 
    @IBAction func btnMediaPickerAction(_ sender: UIButton) {   
      let mediaPicker: MPMediaPickerController = MPMediaPickerController.self(mediaTypes:MPMediaType.music) 
      mediaPicker.delegate = self 
      mediaPicker.allowsPickingMultipleItems = false 
      self.present(mediaPicker, animated: true, completion: nil) 
     } 

// MPMediaPickerController Delegate methods 
    func mediaPickerDidCancel(_ mediaPicker: MPMediaPickerController) { 
      self.dismiss(animated: true, completion: nil) 
     } 

     func mediaPicker(_ mediaPicker: MPMediaPickerController, didPickMediaItems mediaItemCollection: MPMediaItemCollection) { 
      self.dismiss(animated: true, completion: nil) 
      print("you picked: \(mediaItemCollection)")//This is the picked media item. 
// If you allow picking multiple media, then mediaItemCollection.items will return array of picked media items(MPMediaItem) 
      } 
} 

我发现下面discripencies在你的代码:

  • 使用self.present没有self.presentViewController
  • 无需创建mediaPicker全局实例。在代表方法中,您将获得MPMediaPickerController的实例
+0

这仍然不允许我在iOS10中选择一首像它用来允许的歌曲(带来一个可供选择的歌曲列表)。除非我错误地按照你的指示。 –

+0

将'NSAppleMusicUsageDescription'添加到Info.plist中。 – pkc456