如何从MPMediaItemCollection获取艺术品

3

我的目标是在iPod库中获取播放列表的封面图片。我已经做了类似以下的操作:

 playlistMediaItemCollections = MPMediaQuery.playlistsQuery().collections ?? []
 let artworks = playlistMediaItemCollections.map { $0.valueForKey(MPMediaItemPropertyArtwork) as? MPMediaItemArtwork }

但是它会导致错误

 Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<MPConcreteMediaPlaylist 0x1468b1eb0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key artwork.'

有人知道如何获取播放列表的艺术封面吗?谢谢。


@ozgur 这很奇怪,因为你实际上可以选择一张图片作为播放列表的封面。 - bunnyshell
你是在模拟器上测试还是真实设备上测试? - Ozgur Vatansever
@ozgur 在真实设备上。我创建了一些带封面的播放列表来测试。 - bunnyshell
@ozgur 是的,我想是这样。非常感谢。 - bunnyshell
1个回答

5

您应该使用valueForProperty代替:

$0.valueForProperty(MPMediaItemPropertyArtwork) as? MPMediaItemArtwork

然而,我认为与歌曲或专辑不同的是,MediaPlayer API没有提供这样的属性键,让您检索播放列表的艺术品。您可以查看可能可用于MPMediaPlaylist类的属性键

let MPMediaPlaylistPropertyPersistentID: String
let MPMediaPlaylistPropertyName: String
let MPMediaPlaylistPropertyPlaylistAttributes: String
let MPMediaPlaylistPropertySeedItems: String

一种替代方案是,您可以获取播放列表中歌曲的艺术品,并显示其中任意一个或将它们组合起来创建一个新的艺术品来代表该播放列表。

如果播放列表没有艺术品图像,我认为音乐应用程序会执行以下相同的操作。

输入图像描述

let playlist = MPMediaQuery.playlistsQuery().collections?.first
let artworks = playlist?.items.map { $0.valueForProperty(MPMediaItemPropertyArtwork) as? MPMediaItemArtwork }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接