MPMediaQuery和iTunes Match的问题

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

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

但是,当我在“集合”数组中循环时,它似乎根本不会过滤任何歌曲。 我会尝试根据歌曲是否有assetURL ,但当然你无法assetURL过滤。

有没有人有一个相当快的方法来解决这个问题? (或者,有没有人想出一个合适的方式来触发MPMediaItem download ,因为Apple不喜欢有关处理iTunes Match的开发者文档?)

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

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