在我的应用程序中,我正在检查当前播放的歌曲是否是专辑的一部分。我能够做到这一点,但我发现,如果专辑是汇编的一部分,我的代码就不会像预期的那样工作。
我想做的是,如果当前播放的歌曲是专辑的一部分,则会启用按钮,如果不是,则不会启用按钮。在我的iTunes上有一个ablum,所有的歌曲都有完全相同的专辑名称,但在应用程序上按钮没有启用,但iTunes将专辑标记为"汇编"。
我用来查询的代码是
let albumPredicate = MPMediaPropertyPredicate(value: item.albumTitle, forProperty: MPMediaItemPropertyAlbumTitle)
我试过
let compilationPredicate = MPMediaPropertyPredicate(value: item.isCompilation, forProperty: MPMediaItemPropertyIsCompilation)
以及后来的
ifitem.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
}
我在代码中做错了什么?
MPMediaItemPropertyIsCompilation属性的文档指出,它应该封装在NSNumber值中。