我需要显示设备上当前所有播放列表的列表。问题是,在打开 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/