如何在 MPMediaItem 中正确添加音乐编译的谓词
Posted
技术标签:
【中文标题】如何在 MPMediaItem 中正确添加音乐编译的谓词【英文标题】:How to properly add predicate for Music Compilations in MPMediaItem 【发布时间】:2019-10-25 00:14:37 【问题描述】:在我的应用中,我正在检查当前播放的歌曲是否是专辑的一部分。我能够做到这一点,但我发现如果专辑是合辑的一部分,我的代码将无法按预期工作。
我想要做的是,如果当前播放的歌曲是专辑的一部分,则启用按钮,如果不是,则不启用按钮。我的 iTunes 上有一个 ablum,其中所有歌曲的专辑名称完全相同,但在应用程序上该按钮未启用,但 iTunes 将专辑标记为合辑。
我用来查询的代码是
let albumPredicate = MPMediaPropertyPredicate(value: item.albumTitle, forProperty: MPMediaItemPropertyAlbumTitle)
我试过了
let compilationPredicate = MPMediaPropertyPredicate(value: item.isCompilation, forProperty: MPMediaItemPropertyIsCompilation)
以后
如果item.isCompilation == true
来确定我是否会将此谓词添加到过滤器集中。
我还需要注意,我不会意外禁用该按钮,因为当前播放的歌曲不是合辑的一部分,因为歌曲可以是专辑的一部分,但不是合辑,也可以在专辑和合辑中.
func getSongsWithCurrentAlbumFor(item: MPMediaItem) -> MPMediaQuery
let artistPredicateWithin = MPMediaPropertyPredicate(value: item.artist, forProperty: MPMediaItemPropertyArtist, comparisonType: .contains)
let albumPredicate = MPMediaPropertyPredicate(value: item.albumTitle, forProperty: MPMediaItemPropertyAlbumTitle)
let compilationPredicate = MPMediaPropertyPredicate(value: item.isCompilation, forProperty: MPMediaItemPropertyIsCompilation)
var isComp: String
var myFilterSet: Set<MPMediaPropertyPredicate>!
if item.isCompilation == true
myFilterSet = [artistPredicateWithin, albumPredicate, compilationPredicate]
isComp = "true"
else
myFilterSet = [artistPredicateWithin, albumPredicate]
isComp = "false"
print(isComp)
var query = MPMediaQuery(filterPredicates: nil)
query = MPMediaQuery(filterPredicates: myFilterSet)
query.addFilterPredicate(albumPredicate)
albumQuery = query
return albumQuery
我的代码做错了什么?
【问题讨论】:
【参考方案1】:MPMediaItemPropertyIsCompilation 属性的文档说明它应该被包装在一个 NSNumber 值中。
【讨论】:
以上是关于如何在 MPMediaItem 中正确添加音乐编译的谓词的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 MPMediaItem 属性持久 ID 在 iPhone 音乐播放器框架中播放音乐?
iOS:降低包含 iPod 音乐的 MPMediaItem 的比特率
如何在 MPMediaPlaylist 中获取 MPMediaItem 顺序?