func removeFilterPredicate(_ predicate:MPMediaPredicate)不能正常工作

问题描述 投票:0回答:1

尝试func removeFilterPredicate(_ predicate: MPMediaPredicate)时遇到不一致的问题,但是尝试从不有问题>

当我测试我的应用并添加谓词时,它每次都会正常运行。当我尝试删除谓词时,通常它起作用,但有时却不起作用。

我期望的行为是先删除谓词,然后再删除与先前谓词不匹配的随机歌曲

实际上有时发生的事是在删除谓词并跳到下一首歌曲之后,还有更多来自先前谓词的歌曲仍在播放

我发现,如果我想保证它不会失败,可以通过添加谓词以仅播放特定歌手的歌曲,然后快速跳过几首歌曲,然后尝试删除谓词来做到这一点。

我添加谓词的方式是

func addFilterPredicate(_ predicate: MPMediaPredicate)

再也不会失败

删除谓词:

func getSongsWithCurrentArtistFor(item: MPMediaItem) -> MPMediaQuery {
  let artistPredicate = MPMediaPropertyPredicate(value: item.artist, forProperty: MPMediaItemPropertyArtist, comparisonType: .contains)
  let query = MPMediaQuery()
  query.addFilterPredicate(artistPredicate)
  return query
}


let lockArtist = MediaManager.shared.getSongsWithCurrentArtistFor(item: nowPlaying)
  if var items = lockArtist.items {
    items.shuffle()
    let descriptor = MPMusicPlayerMediaItemQueueDescriptor(itemCollection: MPMediaItemCollection(items: items))
    self.mediaPlayer.prepend(descriptor)
   }

[我想知道A)删除func removeArtistLockFor(item: MPMediaItem) -> MPMediaQuery { let artistPredicate = MPMediaPropertyPredicate(value: item.artist, forProperty: MPMediaItemPropertyArtist) let query = MPMediaQuery() query.removeFilterPredicate(artistPredicate) return query } let unlockArtist = MediaManager.shared.removeArtistLockFor(item: nowPlaying) if var items = unlockArtist.items?.filter({ (item) -> Bool in return item.mediaType.rawValue <= MPMediaType.anyAudio.rawValue }) { items.shuffle() let descriptor = MPMusicPlayerMediaItemQueueDescriptor(itemCollection: MPMediaItemCollection(items: self.newSongs.shuffled())) self.mediaPlayer.prepend(descriptor) } 的方式是否有问题,B)我需要某种添加的方法来解决歌曲快速变化的情况,或者C)两者都有。

[我知道我以前发布过有关MPMediaPlayer的问题的信息,特别是有关MPMediaPropertyPredicate的信息,但这些问题已在ios13中解决。这是一个新问题...而且添加谓词始终有效的事实使我认为这更多的是我自己的错误,而不是苹果的问题...?

<<

<< removeArtistLockFor

swift
1个回答
0
投票
应该在添加谓词并将其传递给remove函数之后,一直保持对查询的引用,然后再执行此操作

let query = MPMediaQuery() query.removeFilterPredicate(artistPredicate)

© www.soinside.com 2019 - 2024. All rights reserved.