【发布时间】: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
}
我的代码做错了什么?
【问题讨论】:
标签: swift mpmediaitem mpmediaquery