如何在 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 顺序?

iPhone 4 iOS 5 如何使用 Core Data 保存 MPMediaItem?

是否可以编辑 MPMediaItem 的元数据?

是否可以在 MPMediaCollection 中唯一标识重复的 MPMediaItem?