播放列表的 MPMediaQuery(在 iPod 上)包括一些专辑

Posted

技术标签:

【中文标题】播放列表的 MPMediaQuery(在 iPod 上)包括一些专辑【英文标题】:An MPMediaQuery for playlists (on iPod) includes some albums 【发布时间】:2013-03-01 18:47:16 【问题描述】:

我已经实例化了一个查询来请求我 iPod Touch 上所有播放列表的集合。从 MPMediaQuery 集合属性返回的结果包含 43 个项目。其中包括原生音乐应用程序显示的所有 17 个播放列表。但是,该集合还包含 26 个“播放列表”,它们实际上是我的 iPod 库中的专辑。这代表了 iPod 上的一些(但不是全部)专辑。

我尝试查看是否有 MPMediaPlaylist 属性可以将专辑与实际播放列表区分开来,但无济于事。我查看了收藏的各个部分,看看真正的播放列表是否保存在与专辑不同的部分中,但只有一个部分。最后,我查看了专辑是否有 PersistantID,文档表明它是播放列表独有的。数组中的所有项目都有一个 PersistantID。

“音乐”应用只显示 17 个实际播放列表没有问题,所以我一定缺少一些东西。以下是用于构建查询的代码:

MPMediaQuery * myPlaylistsQuery = [ MPMediaQuery playlistsQuery ];
NSArray      * playlists        = [ myPlaylistsQuery collections ];

以下是询问“播放列表”数组的内容时记录的数据示例:

================================================ ====== 播放列表列表 .... 播放列表集合中有 01 个部分 .... 播放列表集合中有 43 个 MPMediaPlaylist 对象 巴赫 .... 持久ID:17002820337772537981 最好的西蒙和加芬克尔 .... 持久ID:2965021518813542622 蓝色 ....永久ID:11514004552991695558 蓝调 .... 永久ID:14243796139384893728 ....(等)

在上面的列表中,条目“Bach”、“Best of Simon and Garfunkel”和“Blue”代表专辑。条目“Blues”代表了我在 iTunes 上定义的第一个真正的播放列表。

我想我可以将播放列表查询返回的项目与专辑查询中的项目进行比较,并消除任何匹配项。有没有更直接的解决方案?

【问题讨论】:

【参考方案1】:

我经常使用[[MPMediaQuery playlistsQuery] collections],但从来没有得到一张专辑作为结果返回。我猜您的代码中的其他地方存在问题。例如,您仍然可以在手动添加/删除参数创建 playlistsQuery 后对其进行自定义,如果您更改太多,您甚至可以让查询返回专辑而不是播放列表。

特别是检查查询的groupingType 属性。对于 playlistQuery,它应该默认设置为 MPMediaGroupingPlaylist,但您可能已经为查询手动覆盖或删除了此属性。

否则,您的设备系统 API 或 iTunes 库中仅存在错误的可能性。但这非常、非常、非常不可能!

【讨论】:

嗨美穗,感谢您的回复。知道其他人正在使用[[MPMediaQuery playListQuery] collections] 非常有用。按照您的建议,我检查了groupingType 的查询,得到的值为 6,表明它是 MPMediaGroupingPlaylist。您关于添加或删除参数可以改变查询的观点是一个很好的观点。但是,第一篇文章中显示的两行代码是我的代码中执行的前两行(“main”之外)。我同意不太可能出现 API 或 iTunes 错误,但我已经没有可行的选项了。 - 乔治

以上是关于播放列表的 MPMediaQuery(在 iPod 上)包括一些专辑的主要内容,如果未能解决你的问题,请参考以下文章

播放iPod Library歌曲

MPMediaQuery 无效值

UITableview + 来自 ipod 库的图像产生不连贯的滚动。有解决方法吗?

如何在 iOS 上播放列表中的歌曲(仅限歌曲)?

无法用 iPod 音乐初始化 AVPlayer

MPMediaQuery 从persistentID 返回曲目而不是播放列表