ios - MPMediaQuery 和 iTunes 匹配问题

标签 ios objective-c icloud mpmediaitem mpmediaquery

我需要显示设备上当前所有播放列表的列表。问题是,在打开 iTunes Match 的设备上,任何数量的播放列表都可能在手机上保存零个项目。由于(据我所知)当您使用 AVAudioPlayer 时,没有可靠的方法来触发 MPMediaItem 下载,因此我想过滤掉任何不支持 MPMediaItem 下载的播放列表。没有任何本地条目。现在,我可以让它循环浏览单个播放列表并删除没有 assetURL 的歌曲,但是如果用户有很多播放列表,那么在全局范围内执行此操作太慢了。我尝试过滤整个音乐库以获取播放列表

MPMediaQuery *songsQuery = [MPMediaQuery songsQuery];
[songsQuery addFilterPredicate:[MPMediaPropertyPredicate predicateWithValue:[NSNumber numberWithBool:NO] forProperty:MPMediaItemPropertyIsCloudItem]];
songsQuery.groupingType = MPMediaGroupingPlaylist;

但是,当我循环浏览“集合”数组时,它似乎根本没有过滤掉任何歌曲。我会尝试根据歌曲是否有 assetURL 进行过滤,但当然您不能按此进行过滤。

有人有一种相当快速的方法来实现这一点吗? (或者,是否有人找到了触发 MPMediaItem 下载 的好方法,因为 Apple 没有关于处理 iTunes Match 的开发人员文档?)

最佳答案

MPMediaItemPropertyIsCloudItem 过滤器适用于 MPMediaItem 而不是 MPMediaItemCollection。因此,collections 数组不会过滤任何云项目,因为它是一个 MPMediaItemCollection 数组。但 items 数组将过滤云项目,因为它是 MPMediaItem 数组。

从 iOS 6 开始,没有公共(public) API 可以通过第三方应用触发云项目的下载。用户必须切换到内置音乐应用才能执行此操作。

关于ios - MPMediaQuery 和 iTunes 匹配问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14490120/

相关文章:

iphone - 既然 xcode 4 更改了生成的代码,我应该如何将项目添加到 Core Data 中的列表中?

ios - Xcode 和苹果开发者中心也无法添加 Siri 功能

objective-c - c中的非对称多维数组

iphone - 移动文档文件夹的路径?

ios - iCloud 打开/关闭错误

ios - 在 Swift 中隐藏 TabbedBarController 上的后退按钮

ios - iPod Touch 4g 上的磁航向

ios - OCMock 和 block 测试,执行

iOS tableview 单元格 segue Storyboard

swift - 当 ubiquitousItemDownloadingStatusKey 为 'Current' 时,我正在尝试运行一个函数